20. API概览 Schemas
能被机器所理解的概要, 描述了通过api可得到的资源, URL, 表示方式以及支持的操作.
API概要在很多使用场景下都是有用的工具, 例如生成参考文档, 或者驱动可以与API交互的动态客户端库.
rest-framework支持自动生成OPENAPI文档.
生成API概览
安装CoreAPI和PyYAML
安装coreapi包来为REST框架提供概要支持, 同时还可能需要pyyaml包以将概要渲染为通用的YAML格式的开放API格式.
1 |
pip install coreapi pyyaml |
两种方法来生成API描述文档:
- 使用
generateschema管理命令生成静态的概要文件 - 使用SchemaView视图来生成动态的概要响应.
使用generateschema管理命令生成静态的概要文件
1 |
python manage.py generateschema > shcema.yml |
之后会生成一个包含api概要的YAML语法的文件schema.yml, 之后你可以在其中添加额外信息以补充概要生成器所未能包含的其他信息.
这种方法需要手动登记版本控制信息, 并在每个新版本发布时更新该文档, 或者将其作为静态媒体文件由服务器返回.
添加动态生成概要的视图函数
在某些情况下需要的是一个动态的api概要, 因为外键的可选项可能随着数据库中的值而变动. 使用SchemaView并将其注册至路由中, 这样就可以按需生成概要.
将SchemaView添加至路由, 需要使用get_schema_view()辅助函数.
1 |
from rest_framework.schemas import get_schema_view
urlpatterns = [
path('openapi', get_schema_view(
|
参数:
title用以提供的概要标题description较长的描述性文本version标注的api版本, 默认为0.1.0url可用于标注baseURLurlconf该概要所想要包含的urlconf的所在路径, 默认为django的ROOT_URLCONF设置项gengerator_class可能用以指定一个要被SchemaView所使用的SchemaGenerator的子类authentication_classes指定用以进行身份认证的类列表, 默认为django的DEFAULT_AUTHENTICATION_CLASSES设置项permission_classes指定用以进行权限验证的类列表, 默认为django的DEFAULT_PERMISSION_CLASSES设置项renderer_classes用以指定生成最终结果的渲染器类
示例:
1 |
schema_view = get_schema_view( |
自定义概要生成
自定义全部API概要, 或指定视图级的自定义概要.
概要级别的自定义
如果要自定义最高级的概要, 需要子类化rest_framework.schemas.openapi.SchemaGenerator, 并将其作为参数提供给大专栏 20. API概览 Schemasde>generateschema命令或者get_schema_view辅助函数.
SchemaGenerator是一个用来遍历一个urlpattern列表, 并为其中每一个视图生成相关概要的类.
通常需要提供一个title参数将其实例化:
1 |
generator = SchemaGenerator(title='Stock Prices API') |
可用的参数包括
- title
- description
- version
- url
- patterns
- urlconf
各参数的含义与在get_schema_view()函数中相同, 不再赘述. 其中只有title是必要参数.
需要重写的方法为get_schema(self, request)
该方法返回一个字典, 所包含的数据用于表示API概要.
1 |
generator = SchemaGenerator(title='Stock Prices API') |
request参数是可选的, 如果要对生成的模式生成应用每个用户权限, 则可以使用request参数.
如果要自定义生成的字典(例如添加自定义规范扩展名), 则可以覆盖该方法.
视图级别的自定义
默认情况下, 视图自省可通过APIView上的schema属性访问的AutoSchema实例执行. 这为视图, 请求方法和路径提供了适当的Open API操作对象:
1 |
auto_schema = view.schema |
在编译概要时, SchemaGenerator为每个视图, 允许的方法和路径调用view.schema.get_operation().
注意:对于基本的APIView子类, 默认自省本质上仅限于URL关键字路径参数, 对于GenericAPIView子类, 其中包括所有提供的基于类的视图, AutoSchema将尝试内省序列化程序, 分页和过滤器字段, 并提供更丰富的路径字段描述(这里的关键钩子是相关的GenericAPIView属性和方法: get_serializer, pagination_class, filter_backends等).
为了自定义操作生成, 应该提供一个AutoSchema的子类, 并按需重写get_operation()方法
1 |
from rest_framework.views import APIView |
这为视图的自省提供了完全控制.
如果想要某个视图不被包含在api概要中, 将其schema属性设为None即可.
1 |
class CustomView(APIView): |
或是不想让某个ViewSet中自定义路由包含在API概要中
1 |
class CustomViewSet(viewsets.ModelViewSet):
def extra_action(self, request, pk=None):
|
如果要指定某个AutoSchema的子类应用于全局, 通过DEFAULT_SCHEMA_CLASS设置项进行设置.
20. API概览 Schemas的更多相关文章
- V8世界探险 (1) - v8 API概览
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lusing/article/detai ...
- Zookeeper C API 指南四(C API 概览)(转)
上一节<Zookeeper C API 指南三(回调函数)>重点讲了 Zookeeper C API 中各种回调函数的原型,本节将切入正题,正式讲解 Zookeeper C API.相信大 ...
- node-webkit学习(3)Native UI API概览
node-webkit学习(3)Native UI API概览 文/玄魂 目录 node-webkit学习(3)Native UI API概览 前言 3.1 Native UI api概览 Exte ...
- Android 设备管理API概览(Device Administration API)
原文:http://android.eoe.cn/topic/android_sdk Android 2.2通过提供Android设备管理API的支持来引入企业应用支持.在系统级的设备管理API提供了 ...
- Java 8 Date-Time API概览
更新时间:2018-04-19 根据网上资料整理 java 8增加了新的Date-Time API (JSR 310),增强对日期与时间的处理.它在很大程度上受到Joda-Time的影响.之前写过一篇 ...
- underscore api 概览
underscore 集合函数(数组或对象) _.each(list, iteratee, [context]); _.map(list, iteratee, [context]); _.reduce ...
- Proto3:C++ API概览
包名 说明 google::protobuf Protocol Buffer运行时库核心组件. google::protobuf::io I/O操作辅助类. google::protobuf::uti ...
- 朱晔的互联网架构实践心得S2E5:浅谈四种API设计风格(RPC、REST、GraphQL、服务端驱动)
Web API设计其实是一个挺重要的设计话题,许多公司都会有公司层面的Web API设计规范,几乎所有的项目在详细设计阶段都会进行API设计,项目开发后都会有一份API文档供测试和联调.本文尝试根据自 ...
- API设计风格(RRC、REST、GraphQL、服务端驱动)
API设计风格(RRC.REST.GraphQL.服务端驱动) Web API设计其实是一个挺重要的设计话题,许多公司都会有公司层面的Web API设计规范,几乎所有的项目在详细设计阶段都会进行API ...
随机推荐
- AFN Post请求,报错400(code:-1011)
解决方法: 声明请求的参数格式是json, post的数据格式还是传字典. 声明代码: AFHTTPSessionManager *manager = [AFHTTPSessionManager ma ...
- webpack--删除dist目录
1.安装clean-webpack-plugin插件 npm install clean-webpack-plugin --D 2.在webpack.dev.conf.js或者webpack.conf ...
- Python笔记_第三篇_面向对象_7.多态
1. 多态的概念 多态:一种事物的多种形态.其表现形式就是连续的继承关系. 还以人喂食动物的例子.最终目标是人可以喂食任何一种动物.如果人要喂食100多种动物,难道要写100中方法吗?多态就是把属性和 ...
- Linux Man手册的使用示例
转载自:https://blog.csdn.net/ac_dao_di/article/details/54718710 Linux的命令非常多,很多人在学一个命令时,首先想到的是使用百度或者谷歌,或 ...
- Java--平台版本、跨平台、JVM、JDK、JRE
Java2平台版本 Java2平台包括标准版(J2SE).企业版(J2EE)和微缩版(J2ME)三个版本 J2SE 包含那些构成Java语言核心的类. J2EE 包含J2SE 中的类,并且还包含用于开 ...
- jquery选择器之获取父级元素、同级元素、子元素
一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 二.获取同级元素: 1.next([expr]): 获取指定元素的下一个同级元素 2.nextAll([expr]) ...
- LeetCode——15. 三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...
- 吴裕雄--天生自然 pythonTensorFlow自然语言处理:文本数据预处理--生成训练文件
import sys import codecs # 1. 参数设置 MODE = "PTB_TRAIN" # 将MODE设置为"PTB_TRAIN", &qu ...
- 自定义View淡出动画
//AllGestureView为自定义view AllGestureView *gestureView=[[AllGestureView alloc]init]; gestureView.frame ...
- python学习笔记(25)-继承
#继承 class RobotOne: #第一代机器人 def __init__(self,year,name): self.year=year self.name=name def walking_ ...