60. drf之前后端开发模式_api接口_接口测试工具_Restful规范
1. 前后端开发模式
1.1 前后端混合开发
后端人员
既要写后端,如django
又要写前端

后端:django flask Go语言gin框架 Java语言jsp
前端:模板语法(DTL)
HTML
css
js
dtl:django template language 类python语法 {} {%%} xx.html--模板
java: xx.jsp--模板
go:xx.tpl--模板
模板语法的作用:用来渲染模板
js在浏览器中运行
模板语法在后端服务器上运行
前后端混合的运行步骤:
template目录下的xx.html模板中,以{} {%%}的形式存储变量
视图函数中以变量名=变量值的形式,将值传递给模板
模板以纯粹的字符串形式,而不是{} {%%}返回给前端
浏览器获取到了这些包含值的字符串:html(渲染)、css(样式)、js(运行)
前后端混合的特点:模板渲染在后端完成
1.2 前后端分离
后端人员
只写后端 API接口--访问一个地址,返回一系列数据--xml、json
前端人员
只写前端 html、css、js
项目写完
前后端联调

2. API接口
2.1 API接口的定义
规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介,称之为API接口
127.0.0.1:8080/login/?name=avril&age=19
127.0.0.1:8080/books/
2.2 api接口的特点
1.url:url链接
2.请求方式:get、post、delete、put
3.请求参数:json或xml格式的key-value类型数据
地址栏中:login/?name=lqz&age=19
请求体中:不同编码格式:urlencoded,json,form-data
urlencoded:name=lqz&age=19
json:{"name":"avril","age":19}
form-data: 文件混合数据
4.响应结果:json或xml格式的数据
5. API接口遵循的协议:http
请求首行:协议,协议版本,请求地址,请求方式
请求头:key-value
请求体:不同编码格式
6. 举例
通过某API接口获取上海地区的某餐饮门店数量
https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json ----》get请求

3. 接口测试工具Postman
3.1 下载地址
https://www.postman.com/downloads/
.
3.2 请求参数与响应参数
请求方式
请求地址
请求参数
请求头
请求体
--------
响应头
响应体
响应cookie
3.3 举例:发送get请求
[1] 请求参数与响应参数

[2] 请求参数之body

使用form-data上传文件
点击隐藏的file才能选择文件

3.4 导出与导入
注册账号之后才能通过ctrl+s保存请求

接口请求导出为json文件

导入json文件

4. Restful规范
4.1 概念
RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。
写前后端分离项目接口的一个约定俗成的规范
10条规则,但是不一定每条都遵循,并且公司可能还有自定义的规范
4.2 规范要求
1 数据的安全保障--url链接使用https
http
https:更安全
2 接口中带api标识
https://api.baidu.com
https://www.baidu.com/api
3 接口中带版本标识
https://api.baidu.com/v1
https://api.baidu.com/v2
4 数据即是资源,均使用名词(可用复数)
url地址尽量使用名词
接口一般都是完成前后台数据的交互,交互的数据称之为资源
https://api.baidu.com/v1/authors 获取所有的作者
https://api.baidu.com/v1/books 获取所有的图书
https://api.baidu.com/v1/book
注:一般提倡用资源的复数形式,在url链接中不要出现操作资源的动词
错误示范:https://api.baidu.com/delete-user
特别的接口可以出现动词,因为这些接口一般没有明确的资源,或是动词就是接口的核心含义
https://api.baidu.com/place/search
https://api.baidu.com/login
5 通过请求方式,决定资源操作方式 增删查改curd:create,update,retrieve,delete
https://api.baidu.com/books get请求:获取所有书
https://api.baidu.com/books post请求:新增一本书
https://api.baidu.com/books/1 get请求:获取主键为1的书
https://api.baidu.com/books/1 put请求:整体修改主键为1的书
https://api.baidu.com/books/1 delete请求:删除主键为1的书
6 请求地址中带过滤条件
https://api.example.com/v1/zoos?name=大象
https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json
region=%E4%B8%8A%E6%B5%B7& 字符串为上海
query=%E8%82%AF%E5%BE%B7%E5%9F%BA& 字符串为肯德基
# get请求表示查询所有图书,要查名字中有红的图书
https://api.baidu.com/books
https://api.baidu.com/books?name_contains=红
# :指定返回记录的数量
https://api.example.com/v1/zoos?limit=10
# :指定返回记录的开始位置
https://api.example.com/v1/zoos?offset=10
# :指定第几页,以及每页的记录数
https://api.example.com/v1/zoos?page=2&per_page=100
# :指定返回结果按照哪个属性排序,以及排序顺序
https://api.example.com/v1/zoos?sortby=name&order=asc
# :指定筛选条件
https://api.example.com/v1/zoos?animal_type_id=1
7 响应中带状态码
http响应状态码:1xx,2xx,3xx,4xx,5xx
404和403区别
301和302区别
公司自定义的状态码
100 成功
101 xx错误
102 xx错误
1xx(信息性状态码):表示服务器已接收请求,正在处理。
100 Continue:服务器已成功接收到请求的起始部分,客户端应继续发送剩余部分。
101 Switching Protocols:服务器要求客户端切换协议。
2xx(成功状态码):表示请求已成功被服务器接收、理解和处理。
200 OK:请求成功,服务器正常返回数据。
201 Created:请求已经成功处理,并创建了新的资源。
202 Accepted:服务器已接受请求,但尚未处理完成。
204 No Content:请求已成功处理,但没有返回任何内容。
3xx(重定向状态码):表示客户端需要采取进一步的操作才能完成请求。
301 Moved Permanently:请求的资源已被永久移动到新位置。
302 Found:请求的资源暂时被移动到新位置。
304 Not Modified:客户端使用缓存数据,请求资源未被修改。
4xx(客户端错误状态码):表示客户端发出的请求有误。
400 Bad Request:服务器无法理解客户端的请求。
401 Unauthorized:请求要求用户验证身份。
403 Forbidden:服务器拒绝执行请求,权限不足。
404 Not Found:请求的资源在服务器上不存在。
5xx(服务器错误状态码):表示服务器无法完成明显有效的请求。
500 Internal Server Error:服务器遇到了一个未曾预料的错误。
502 Bad Gateway:服务器作为网关或代理服务器时,从上游服务器收到无效的响应。
503 Service Unavailable:服务器当前无法处理请求(可能由于过载或维护)。
8 响应中带错误信息
{status:101,message:"用户名密码错误"}
{code:100,msg:"成功"}
9 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范
GET /collection:返回资源对象的列表(数组) 查所有数据返回列表(数组)形式
[{name:红楼梦,price:100},{name:红楼梦1price:90}]
GET /collection/resource:返回单个资源对象 查单个数据
{name:红楼梦,price:100}
POST /collection:返回新生成的资源对象 返回新增的对象
{name:红楼梦,price:100}
PUT /collection/resource:返回完整的资源对象 返回修改后的对象
{name:红楼梦,price:100}
DELETE /collection/resource:返回一个空文档 删除返回空文档
10 返回数据中带url链接
5. 序列化与反序列化
5.1 序列化
将内存中的Python数据结构(列表、字典、类实例等)转换为可存储、可传输的格式(json格式字符串、pickle二进制)
例如:
在django中获取到的数据默认是模型对象(queryset对象),但是模型对象数据无法直接提供给前端或别的平台使用,所以需要将数据进行序列化,变成json格式字符串,向外提供。
5.2 反序列化
将存储 / 传输后的格式数据重新还原为内存中可直接操作的 Python数据结构
例如:
前端js提供过来的json数据,对于python而言就是字符串,需要进行反序列化换成模型类对象,这样才能将数据保存到数据库中
5.3 drf的序列化与反序列化
序列化:
drf称为 read(读取数据)
queryset --- > json
返给前端
反序列化:
drf称为 write(写入数据)
字符串 --- > json
接收前端的数据

浙公网安备 33010602011771号