RESTful API规范
restful规范
前后端分离要写接口 ---》api接口---》接口测试工具postman
restful规范是什么,如何来的?
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征性状态转移)。 它首次出现在2000年Roy Fielding的博士论文中。
RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。
这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。
restful规范 --10条
-1 数据的安全保障
url链接一般都采用https协议进行传输--》它比http安全
-2 接口特征表现--》url中带api标识
-https://api.xxx.com/books/
-https://www.xxxx.com/api/books/
-3 多数据版本共存--》url中带版本信息
https://api.xxxx.com/v1/books
https://www.xxx.com/api/v2/books
-4 数据即是资源,均使用名词(可复数)
-->前后台交互,交互的数据称之为资源
-数据即资源,前后端交互的数据称之为资源,url尽量使用名字
-https://127.0.0.1/api/v1/books/ -->表示对图书操作:增加,删除,查询,修改,都用这一个地址
-https://127.0.0.1/api/v1/get_all_books/ # 不符合restful规范
-https://127.0.0.1/api/v1/delete_books/# 不符合restful规范
-5 资源操作由请求方式决定
-get 请求获取数据(获取所有,获取单条)
-post 新增数据
-put 修改数据
-delete 删除数据
https://api.baidu.com/books - get请求:获取所有书
https://api.baidu.com/books/1 - get请求:获取主键为1的书
https://api.baidu.com/books - post请求:新增一本书书
https://api.baidu.com/books/1 - put请求:整体修改主键为1的书
https://api.baidu.com/books/1 - delete请求:删除主键为1的书
-6 请求地址中带过滤条件
---》只针对于搜索所有接口
- 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 响应状态码(两层)
正常响应
- 响应状态码2xx
- 200:常规请求
- 201:创建成功
重定向响应
- 响应状态码3xx
- 301:永久重定向
- 302:暂时重定向
客户端异常
- 响应状态码4xx
- 403:请求无权限
- 404:请求路径不存在
- 405:请求方法不存在
服务器异常
- 响应状态码5xx
- 500:服务器异常
-8 响应中带错误信息
{
"code": 101,
"msg": "用户名或密码错误"
}
-9 不同操作,返回格式符合如下标准
GET /collection:返回资源对象的列表(数组)
[{name:西游记,price:19},{name:三国,price:19}]
GET /collection/resource:返回单个资源对象
{name:三国,price:19}
POST /collection:返回新生成的资源对象
{name:三国,price:19}
PUT /collection/resource:返回完整的资源对象
{name:三国演绎,price:19}
DELETE /collection/resource:返回一个空文档
---》或者这么做
{
code:100
msg:查询成功
restult:[{name:西游记,price:19},{name:三国,price:19}]
}
-10 响应中带链接
序列化反序列化
序列化: 数据转换格式
序列化(Serialization):将数据从其原始的数据结构或对象转换为一种通用的格式,如 JSON、XML 等,以便于在不同的应用程序之间传输、存储或显示。在编程中,序列化通常是为了将数据进行持久化或网络传输,从而能够在不同的环境中保持数据的一致性。
反序列化(Deserialization):将序列化后的数据重新转换为原始的数据结构或对象。反序列化通常是在接收到序列化数据后,需要将其还原为可操作的数据类型,以便进行进一步的处理。
序列化反序列化两个阶段:
-序列化:把我们识别的数据转换成指定的格式提供给别人
python对象/字典 - - - >> json格式
data = {"name": "John", "age": 30, "city": "New York"}
json_string = json.dumps(data)
print(json_string) # 输出为 JSON 字符串:
-反序列化:把别人提供的数据转换/还原成我们需要的格式
json格式 - - - > > python对象/字典
json_string = '{"name": "John", "age": 30, "city": "New York"}'
data = json.loads(json_string)
print(data) # 输出为 Python 字典