Restful规范
Restful规范
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征性状态转移)。它首次出现在2000年Roy Fielding的博士论文中
RESTFUL是一种定义Web API接口的设计风格,尤其适合前后端分离的应用模式中。
这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源访问的接口,所以在定义接口时,客户端访问的URL路径就表示这种需要操作的数据资源
事实上,我们可以使用任何一种框架都可以实现符合RESTFUL规范的API接口
- 数据的安全保障
url链接一般都采用https协议进行传输,注:采用Https协议,可以提高数据 交互过程中的安全性
- 接口的特征表现
-用api关键字标识接口url:
-[https://api.baidu.com](https://api.baidu.com/)
-https://www.baidu.com/api
注:看到api字段,就代表该请求url链接是完成前后端数据交互的
- 多版本共存
-在url链接中标识数据版本
-https://api.baidu.com/v1
-https://api.baidu.com/v2
注:url链接中的v1,v2,就是不同数据版本的提现,(只有在一种数据资源有多版本情况下)
- 数据即资源
接口作为前后端交互的媒介其交互的数据又被叫做资源,推荐使用名词或者名词的复数形式,对于某些特殊接口,我们可以使用动词(api/books api/login)
- 接口一般都是前后端数据的交互,交互的数据称之为资源
- https://api.baidu.com/users
- https://api.baidu.com/books
- **资源操作由请求方式决定 ** (method)
资源的操作我们直接通过提交的请求方式来决定(get、post、put/patch、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 -patch请求:局部修改主键为1 的书
https://api.baidu.com/books/1 -delete请求:删除主键为1 的书
- 过滤
我们可以再url上传参的形式传递搜索条件
https://api.example.com/v1/people?limit=10 :指定返回记录的数量
https://api.example.com/v1/people?offset=10 :指定返回记录的开始位置
https://api.example.com/v1/people?page=2&per_page=100 :指定第几页,以及每页的记录数
https://api.example.com/v1/people?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序
https://api.example.com/v1/people?animal_type_id=1 :指定筛选条件
- 响应状态码
# 正常响应
200(正常请求)、
201(创建成功)、
# 重定向响应
301(永久重定向)、
302(临时重定向)、
# 客户端异常
403(请求无权限)、
404(请求路径不存在)、
405(请求方法不存在)、
# 服务端异常
500(服务器异常)、
- 错误处理
应当返回错误信息 error当作key
{
error:'无权限操作'
}
- 返回结果
根据不同的请求以及请求得到的数据, 服务端返回不同的结果
GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完成的资源对象
DELETE /collection/resource:返回一个空文档
- 需要url请求的资源需要访问资源的请求链接
# Hypermedia API ,RESTFUL API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么
{
"status":0,
"msg":"OK",
"results":[
{
"name":"肯德基",
"img":"https://image.baidu.com/ftc/001.png"
}
........
]
}
本文来自博客园,作者:ExpiredSaury,转载请注明原文链接:https://www.cnblogs.com/saury/p/16976635.html