模式是一个机器可读文档,描述可用的API端点,URL以及它们支持的操作。

模式对于自动生成文档是一个很有用的工具,也可以用来动态调用可以于API交互的客户端库。

Core API

为了提供模式支持,REST framework 使用核心API。

核心API是描述API的规范文档,它被用来提供可用端点的内部表现方式和API公开的可能的交互。它既可以在服务器端,也可以在客户端。

当使用在服务器端,核心代码允许API来支持对各种模式或者超媒体格式的渲染。当使用在客户端,核心API允许动态驱动客户端库,可以跟公开支持的模式或者超媒体格式的任何API交互。

Adding a schema

REST framework 支持明确定义模式视图或者自动生成模式。由于使用了视图集(viewset)和路由(router),可以简化使用自动模式生成。

你可能需要安装 coreapi python包

pip3 install coreapi

现在可以在URL配置中包含一个自动生成的模式视图来包含API模式

from rest_framework.schemas import get_schema_view

schema_view = get_schema_view(title='Pastebin API')

urlpatterns = [
url(r'^schema/$', schema_view),
...
]

如果访问/visit/端点在浏览器上,你现在可以看到corejson变成一个可选选项。

我们也可以从命令行请求

默认的输出格式是使用Core Json编码的。其他模式格式,比如Open API也是支持的

Using a command line client

现在我们的API暴露了一个模式端点,我们可以使用一个动态的客户端库来与API交互。为了演示这一点,让我们使用核心API命令行客户端。

首先安装模块:

pip3 install coreapi-cli

用法:

现在使用命令行客户端加载API模式

还没有认证,所以现在我们只能看到只读的端点。

使用命令行客户端,列出存在的snippet

一些API端点需要带名称的参数,比如,回到之前高亮的HTML里面某一个特殊的snippet,需要提供一个id

Authenticating our client

如果想要创建,编辑,删除snippets,就需要验证是否为一个合法的用户。在这个事例里,我们只是使用了基础的验证。

shuais-MBP:~ dandyzhang$ coreapi credentials add 127.0.0.1 dandy:password. --auth basic
Added credentials
127.0.0.1 "Basic ZGFuZHk6cGFzc3dvcmQuMQ=="

现在再去访问之前的模式,就能够看到整个可以可用的交互了。

现在可以跟这些端点交互了。例如创建一个新的snippet

同样的,也可以进行删除

shuais-MBP:~ dandyzhang$ coreapi action app01 snippets delete --param id=

和命令行客户端一样,开发者也可以使用客户端库来跟你的API交互。

Django REST framework 第七章 Schemas & client libraries的更多相关文章

  1. Tutorial 7: Schemas & client libraries

    转载自:http://www.django-rest-framework.org/tutorial/7-schemas-and-client-libraries/ Tutorial 7: Schema ...

  2. Django REST framework 第六章 ViewSets & Routers

    REST framework包含了一个可以处理ViewSets的抽象, 它允许开发人员专注于API的状态跟交互进行建模,并使得URL构建结构基于通用的约定自动处理. ViewSet类跟View类几乎相 ...

  3. Django REST framework 第五章 Relationships & Hyperlinked APIs

    到目前为止,API内部的关系是使用主键来代表的.在这篇教程中,我们将提高API的凝聚力和可发现性,通过在相互关系上使用超链接. Creating an endpoint for the root of ...

  4. Django REST framework 第四章 Authentication

    到目前为止,撰写的API没有任何限制关于谁能更新.删除snippet. 我们更想要一些高级行为来确保: 1.代码段总是跟创建者有关联 2.只要认证通过的用户才能创建 3.只有创建者有权限更新或者删除 ...

  5. Django REST framework 第三章 CBV

    从介绍Django快开始,我们就一直在使用FBV的方式来撰写代码,二者本质上并没有太大的区别,然而到了REST framework,更会倾向于用CBV来写API的视图,后面会看到这个方式的强大,它允许 ...

  6. django rest framework 详解

    Django REST framework 是用于构建Web API 的强大而灵活的工具包. 我们可能想使用REST框架的一些原因: Web浏览API对于开发人员来说是一个巨大的可用性. 认证策略包括 ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...

  8. 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7  标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...

  9. Django Rest Framework源码剖析(七)-----分页

    一.简介 分页对于大多数网站来说是必不可少的,那你使用restful架构时候,你可以从后台获取数据,在前端利用利用框架或自定义分页,这是一种解决方案.当然django rest framework提供 ...

随机推荐

  1. jquery基本语法(一)

    https://www.cnblogs.com/haiyan123/p/7657151.html 一.jQuery基础1.为什么要用jquery?    写起来简单,省事,开发效率高,兼容性好2.什么 ...

  2. Filter(过滤器)

    一.Filter过滤器(重要) Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作. 1.Filter快速入门 1.1.步骤: 1. 创建一个类实现Filter接口 2. 重写接口中方 ...

  3. adb 查看包名或其他

    http://blog.sina.com.cn/s/blog_5b478f870102v5bo.html

  4. vue(基础一)_基本指令的使用

    一.前言 1.基本骨架                          2.插值表达式{{ }}   3.vue起的作用,在开发中充当的角色MVC                           ...

  5. mysql写shell小技巧

    set global general_log=on;set @file=0x653A2F2F7777772F2F782E706870;set global general_log_file=@file ...

  6. 如何打开.lxe文件

    介绍两款播放器: 第一款:PotPlayer,这款软件快进看学习视频特特别方便. 软件的下载地址:链接:http://potplayer.daum.net/?lang=zh_CN 第二款:屏幕录像专家 ...

  7. vmware centos7 网络配置

    1. 在vmware创建centos虚拟机 2. 在cmd下看一下本机所处的网段,并对一下vmware上的配置 如果同样处于同一网段(192.168.aaa.bbb,aaa处一致就行),就可以直接开机 ...

  8. 如何再window下统计自己写的代码行

    git log --since="2018-05-01" --before="2018-11-5" --author="$(git config -- ...

  9. nGrinder TestRunnerInsertMysqlSingle.groovy

    s C:\Users\Lindows\workspace\GroovyTest\src\com\iteye\lindows\mysql\TestRunnerInsertMysqlSingle.groo ...

  10. Sql Server时间格式化笔记

    Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVERT(varchar(100), GETDATE() ...