教程7–Schemas和客户端库

schema是集中机器可读的文档,用以描述API,URLS以及他们支持的操作。
Schemas可用于自动生成文档,也可以用来驱动动态客户端库的使用。

Core API

为了能够提供schema支持,REST框架使用了Core API。
Core API是一种描述API的文档规范,它被用来提供一个API的可用端点和可能的交互内部表示格式。它可以使服务器端,也可以是客户端。
如果是服务器端,Core API允许一个API支持渲染成广泛的Schema或者超媒体格式。
如果是客户端,Core API允许动态驱动客户端库来与任何的API交互,通过被支持的schema或者超媒体类型。

添加一个schema

REST框架支持明确声明schema视图,或者自动生成schemas。如果我们使用viewsets和routers,那么我们就可以自动生成schema了。
你需要安装coreapi

$ pip install coreapi

现在,我们可以通过在URL配置中包含一个schema view来引入schema。

from rest_framework.schemas import get_schema_viewschema_view = get_schema_view(title='Pastebin API')urlpatterns = [url(r'^schema/$', schema_view), ...
]

如果你此时访问API root,你会发现一个corejson的选项。

我们也可以在在命令行访问schema,在Acceptheader中指定媒体类型即可。

$ http http://127.0.0.1:8000/schema/ Accept:application/coreapi+json
HTTP/1.0 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/coreapi+json{"_meta": {"title": "Pastebin API"},"_type": "document",...
}

默认的输出风格是使用了Core JSON编码。
其他的schema格式,例如OpenApi(Swagger)也是支持的。

使用命令行客户端

现在我们API已经暴露了schema,我们可以使用动态客户端库来与这些API进行交互。

pip install coreapi-cli

现在检查一下是否安装成功。

$ coreapi
Usage: coreapi [OPTIONS] COMMAND [ARGS]...Command line client for interacting with CoreAPI services.Visit http://www.coreapi.org for more information.Options:--version  Display the package version number.--help     Show this message and exit.Commands:
...

首先我们使用命令行客户端加载API Schema。

$ coreapi get http://127.0.0.1:8000/schema/
<Pastebin API "http://127.0.0.1:8000/schema/">snippets: {highlight(id)list()read(id)}users: {list()read(id)}

目前我们还没有登录,所以只能读不能写,让我们先来试试列出所有snippet:

$ coreapi action snippets list
[{"url": "http://127.0.0.1:8000/snippets/1/","id": 1,"highlight": "http://127.0.0.1:8000/snippets/1/highlight/","owner": "lucy","title": "Example","code": "print('hello, world!')","linenos": true,"language": "python","style": "friendly"},...

一些API需要提供参数,可以这样做:

$ coreapi action snippets highlight --param id=1
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>
<head><title>Example</title>...

登录认证

如果我们想创建删除修改代码段,按照之前的程序逻辑,就必须要登录了。在这里我们只使用基础的验证方式(用户名+密码)。
在下面的例子中,使用你自己的值替换<username><password>

$ coreapi credentials add 127.0.0.1 <username>:<password> --auth basic
Added credentials
127.0.0.1 "Basic <...>"

现在,如果我们重新拉取schema,我们可以看到一份完整的可操作的交互列表。

$ coreapi reload
Pastebin API "http://127.0.0.1:8000/schema/">snippets: {create(code, [title], [linenos], [language], [style])delete(id)highlight(id)list()partial_update(id, [title], [code], [linenos], [language], [style])read(id)update(id, code, [title], [linenos], [language], [style])}users: {list()read(id)}

现在我们试试创建一个新代码段:

$ coreapi action snippets create --param title="Example" --param code="print('hello, world')"
{"url": "http://127.0.0.1:8000/snippets/7/","id": 7,"highlight": "http://127.0.0.1:8000/snippets/7/highlight/","owner": "lucy","title": "Example","code": "print('hello, world')","linenos": false,"language": "python","style": "friendly"
}

删除一个代码段:

$ coreapi action snippets delete --param id=7

除了使用命令行客户端,开发人员还可以使用客户端类库来和API进行交互。Python客户端是您的第一选择,JS的客户端也计划很快推出。
关于自定义Schema生成和使用 Core API 客户端类库的更多细节,请参考官方文档。

总结

我们只用了少量的代码,就有了一个完整的Web API,这是完全基于WEB可浏览的,包括一个schema驱动的客户端类库,和权限认证,对象级权限,多格式渲染等。
我们已经一起走过了开发的每一个步骤,并知道了如何自定义Django视图。
你可以在GitHub上查看完整代码,或者在沙盒中感受一下这个完整的示例。

继续探索

到这里为止,我们的教程就全部结束了。如果你希望更多地参与到REST框架项目中来,有这样几种选择:

  • 在Github上提交issues,或者pull requests。
  • 加入REST framework discussion group,帮助我们一起建设社区。
  • 在Twitter上关注作者

现在,去创造令人拍案叫绝的项目吧!

教程7--Schemas和客户端库相关推荐

  1. Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务 参考博客:http://blog.csdn.net/zhyl8157121/article/d ...

  2. java xmpp 框架_即时聊天IM之三 XMPP协议客户端库的和Android端框架概述

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q  Q:408365330     E-Mail:egojit@qq.com smack ...

  3. Flow公链|Flow客户端库的简单力量

    背景介绍:Flow 是一个全新的公链,最初由 CryptoKitties 和 NBA Top Shot 的创造者 Dapper Labs 设计和开发.在这个系列中,我们将以 Flow 客户端库 (FC ...

  4. rest客户端java生成_rest – 使用Enunciate生成Java客户端库

    我有几个RESTful webservices我想使用Maven使用 Enunciate 1.25进行记录.如果我在没有自定义enunciate.xml的情况下构建,则所有客户端库都按预期构建. .. ...

  5. ip地址 python request_【Python】 http客户端库requests urllib2 以及ip地址处理IPy

    requests requests是个HTTPClient库,相比于urllib,urllib2等模块比更加简洁易用 ■ get请求 作为示例,讲一下关于requests如何发起并处理一个get请求 ...

  6. linux下载python的es库,Elasticsearch py客户端库安装及使用方法解析

    一.介绍 elasticsearch-py是一个官方提供的low-level的elasticsearch python客户端库.为什么说它是一个low-level的客户端库呢?因为它只是对elasti ...

  7. 功能强大的 C++ redis 客户端库增加至 acl 项目中

    虽然 redis 开发库已有不少,但 C/C++ 的客户端库好用的并不多,虽然官方也提供了 C 版的客户端库,但易用性较差,而且不支持连接池功能,相对于 C/C++ 的库,JAVA 版的 jedis ...

  8. mysql 57授权失败_MYSQL教程完美解决mysql客户端授权后连接失败的问题

    <MYSQL教程完美解决mysql客户端授权后连接失败的问题>要点: 本文介绍了MYSQL教程完美解决mysql客户端授权后连接失败的问题,希望对您有用.如果有疑问,可以联系我们. MYS ...

  9. 《NLTK基础教程——用NLTK和Python库构建机器学习应用》——2.11 小结

    本节书摘来异步社区<NLTK基础教程--用NLTK和Python库构建机器学习应用>一书中的第2章,第2.11节,作者:Nitin Hardeniya,更多章节内容可以访问云栖社区&quo ...

最新文章

  1. linux 运行lua脚本语言,你知道在linux下搭建lua脚本语言的编程环境?
  2. 时间日期格式转换_JAVA
  3. Easyexcel文件下载时,中文名称显示为下划线
  4. P2050 [NOI2012]美食节
  5. 【90】沟通:跨部门管理
  6. html制作统计期末成绩,JS-结合html综合练习js的对象——班级成绩表制作
  7. T-SQL字符串相加之后被截断的那点事
  8. 【译】响应式CSS动画
  9. java中打印当前时间_在java中打印当前日期
  10. 【Java】俄罗斯方块小游戏(附源码)
  11. Junit单元测试——如何正确测试异常
  12. 美化复选框html,使用CSS3美化复选框checkbox
  13. 一键实现证件照背景的替换,Python 制作可视化GUI界面真香啊
  14. Alpha测试 / Beta测试 / 黑盒测试 /白盒测试概述
  15. 12个思维导图工具,像数据科学家一样结构化地思考
  16. 什么是gpo,gpt,gpc(活动目录组策略)
  17. .net 4.0 ValidateRequest=false 无效解决方法
  18. 雷赛服务器信号er020,【雷赛】L6E 伺服系统 EtherCAT 通讯功能手册.pdf
  19. 图谱卷积预备知识1:拉普拉斯矩阵
  20. 面试指导笔记——面试篇

热门文章

  1. Duang!Markdown
  2. 猿辅导python资源_2020猿辅导(小猿搜题)高中辅导全资源合集百度网盘下载
  3. linux如何卸载lightdm,告诉你Ubuntu安装LightDM的方法及命令
  4. 如何利用自定义函数把阳历转换成阴历
  5. Java爬虫之批量下载LibreStock图片(可输入关键词查询下载)
  6. STM32F107中断优先级分组配置
  7. python求反余弦_余弦相似度计算公式:python代码找出相似文章
  8. AttributeError: module ‘torch‘ has no attribute ‘inference_mode‘
  9. Selenium:元素判断
  10. 【火车头采集教程】轻而易举学会火车头采集(附带采集案例)