Restful规范
什么是RESTful
Representational State Transfer ---> 表征状态转移
RESTful是一种定义Web API 接口的设计风格、API接口的编写规范,尤其适用于前后端分离的应用模式中。
这种风格的临边认为后端开发任务就是提供数据的,对外提供的数据资源的访问接口,所以在定义接口是,客户端访问的URL路径就表示这种要操作的数据资源
我们可以使用任何一个框架都可以实现符合restful规范的API接口
10条规范
1. 数据的安全保障:通常使用HTTPS来部署,采用HTTPS协议,可以提高数据交互过程中的安全性
2. 接口特征表现:URL地址带接口标识
3. 多版本共存:URL地址中带版本信息
4. 数据即资源,均使用名词:URL地址尽量使用名词
5. 资源操作由请求方式操作:GET请求获取数据,POST请求新增数据
6. 请求地址中带过滤条件 --- 只针对于搜索所有接口
7. 响应状态码--->HTTP的响应状态码
1XX 表示请求正在处理
2XX
3XX
4XX
5XX
8. 响应中带错误信息
9. 不同操作,返回格式符合如下标准
序列化和反序列化
API接口开发,最核心最常见的一个过程就是序列化,所谓序列化,就是把数据转换格式,序列化可以分两个阶段:
序列化: 把我们识别的数据转换成指定的格式提供给别人
例子:我们子啊Django中湖区到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或者别的平台使用。所以我们会需要把数据进行序列化,变成字符串或者JSON数据,提供给别人、
返序列化:把别人提供的数据转换/还原成我们需要的格式
例子:前端JS提供过来的JSON个数数据,对于Python来说就是字符串,我们需要进行规范序列化转换成模型类对象,这样我们才能把数据保存到数据库中。
drf介绍和快速使用
基于Django编写符合restful规范的接口 假设以BOOK表为例,写它的5个接口
drf之APIview源码分析
执行流程分析:
- 包装了新的request
- 执行了认证、频率、权限, 这三大认证
- 全局异常处理,在视图类的方法中执行报错,会被异常捕获做异常处理
- 去除了CSRF认证
分析
BookDetailView.as_view()
源代码
APIView 的源代码(缩略版)
@classmethod
def as_view(cls, **initkwargs):
view = super().as_view(**initkwargs) # 直接去父级VIEW里面的as_view执行闭包函数
return csrf_exempt(view) # 去掉CSRF认证,相当于在视图层上面添加了去除装饰器
@classonlymethod
def as_view(cls, **initkwargs):
def view(request, *args, **kwargs):
self = cls(**initkwargs)
self.setup(request, *args, **kwargs)
if not hasattr(self, 'request'):
raise AttributeError(
"%s instance has no 'request' attribute. Did you override "
"setup() and forget to call super()?" % cls.__name__
)
return self.dispatch(request, *args, **kwargs)
view.view_class = cls
view.view_initkwargs = initkwargs
# take name and docstring from class
update_wrapper(view, cls, updated=())
# and possible attributes set by decorators
# like csrf_exempt from dispatch
update_wrapper(view, cls.dispatch, assigned=())
return view