DRF (First Day)
什么是Web API接口
接口概念
规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介
Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点
-
url: 长的想返回数据的url链接
-
请求方式: get, post, put, patch, delete
- 采用get方式请求上方接口
-
请求参数: json或xml格式的key-value类型数据
- ak: 申请一个
- region: 上海
- query: 肯德基
- output: json
-
响应结果: json或xml格式的数据
- 上方请求参数的output参数值决定了响应数据的格式,默认为xml
接口文档的编写
使用YApi
YApi可以搭建在任何本地或云服务器上,完成后台项目开发时的接口编写.为开发,测试等人员提供可视化的接口预览
接口测试工具
Postman是一款接口调试工具,是一款免费的可视化软件,同事支持各种操作系统平台,是接口测试的首选工具
https://www.getpostman.com/downloads/
drf框架安装
drf框架安装:
- drf是Django的插件,所以要提前安装Django
- 按照命令:
pip install djangorestframework
- 使用drf时,要在settings中注册
import rest_framework
restful接口规范
"""
url链接
1) 接口都是操作前后台数据,所以需要保证数据的安全性
采用http协议
2) 接口用来操作数据,与网址(操作页面)有区别,所以用特定的关键字表示接口
采用api关键字
- http://api.baidu.com
- http://www.baidu.com/api
3) 接口操作的数据称之为 资源 ,在url中只体现 资源 名称(名词),不体现操作资源的方式动词
常规资源接口
- http://api.baidu.com/books/
- http://api.baidu.com/books/(pk)/
非常规接口 - 和某资源不是特别密切或是不止一种资源
- http://api.baidu.com/login/
- http://api.baidu.com/place/search/
4) 如果一个资源存在多版本结果, 在url链接中要用特定符号来兼容多版本共存
v1|v1
- http://api.baidu.com/v1/books/
- http://api.baidu.com/v2/books/
5) 群资源操作,一般还有额外的限制条件,如排序,限制调试,分页等等
?限制条件
-http://api.baidu.com/v1/books/?ordering=-price&limit=3
请求方式
6) 五大请求方式
get: 获取单个或多个资源
- http://api.百度.com/books/
群查,返回多个结果对象
- http://api.baidu.com/books/(pk)/
单查,返回单个结果对象
post: 新增单个或多个资源
- http://api.baidu.com/books/
单增,提交单个数据字典,完成单增,返回单个结果对象
群增,提供多个数据字典的数组,完成群增,返回多个结果对象
put: 整体修改单个或多个资源
- http://api.baidu.com/books/(pk)/
整体修改多个,提供多个数据字典的数组(数据字典中要包含主键),完成群改,返回多个结果对象
- http://api.百度.com/books/(pk)/
整体修改多个,提供单个数据字典(主键在url中体现),完成单改,返回单个结果对象
patch: 局部修改单个或多个资源
方式与put完全相同,不同的是: 操作的资源如果有5个key-value键值对,put请求提供的字典必须全包含,但是patch提供的字典包含的键值对0~5个都可以
delete: 删除单个或多个资源
- http://api.baidu.com/books/
多删,提供多个资源主键数据,完成群删,不做任何资源返回(一般我们会返回结果信息:成功|失败)
- http://api.baidu.com/book/(pk)/
单删,不需要提供额外的数据,完成单删,不做任何资源返回(一般我们会返回结果信息:成功|失败)
响应结果
7) 响应对象中要包含网络状态码(网络状态信息和网络状态码捆绑出现,不要额外设置):
1xx: 基本信息
2xx: 成功 - 200基本;201新增成功
3xx: 重定向
4xx: 客户端错误 - 400错误请求;403请求无权限;404请求资源不存在
5xx: 服务端错误 - 500服务器错误
8) 数据状态码(一般都是前后台约定规则):
0: 成功
1: 失败 - 1xx: 具体失败信息(要在接口文档中明确写出)
2: 无数据 - 2xx: 具体无数据信息(要在接口文档中明确写出)
9) 数据状态信息(一般不仅仅是对数据状态码的解释,更多的是对结果的描述,给前台开发者阅读的)
10) 数据结果(常量,数组,字典),如果有子资源(图片,音频,视频),返回资源的url链接
{
"status": 0,
"msg": 'ok',
"results": [{
"name": "西游记",
"img": "https://api.baidu.com/media/book/xyj.png"
}]
}
"""