前后端 RESTful
RESTful 是一种备受推崇的 API 开发风格。
一、什么是 RESTful ?
REST,Representational State Transfer,即表象层状态转变;ful 为形容词后缀。所谓 RESTful,就是符合 REST 原则的。
简单来说,RESTful 就是用 URL 定位资源,用 HTTP 动词描述操作。
示例:
1
2
3
4
5
6
https://example.com/api/users GET 获取所有用户信息
https://example.com/api/users/1 GET 获取标识为1用户信息
https://example.com/api/users/1 DELETE 删除标识为1用户信息
https://example.com/api/users/1 PUT 更新标识为1用户信息
https://example.com/api/users/1 PATCH 更新标识为1用户部分信息(只需要传递更新的信息)
https://example.com/api/users POST 添加新的用户
二、原则
- C-S 架构:客户端与服务器分离
- 无状态:每个请求中都包含所有信息
- 统一的接口:接口应该保持统一
- 系统分层:引入中间层,客户端只需要与中间层进行交互
- 缓存:响应应该被隐式或显式的定义为可缓存的,从而减少客户端与服务器的交互次数
- 按需编码(可选):服务器可以通过响应传递功能代码交由客户端执行,从而扩展客户端的功能
三、规范
1. 使用 HTTP 请求方式来描述行为
使用 HTTP 请求方式,而不是 URL 来描述本次请求希望完成的行为。
例如:
- GET:查
- POST:增
- PUT:改
- PATCH:改,部分更新(只需要传递更新的信息)
- DELETE:删
2. URL 中只能包含名词
错误:
1 |
|
正确:
1 |
|
3. 名词应该为复数
为统一起见,URL 中的名词都使用复数
4. 避免多级 URL
多级的 URL 不利于扩展,并且语法也不明确。因此,除了 ID 以外,其它参数都应该以查询参数的形式传递
错误:
1 |
|
正确:
1 |
|
5. 发生错误时,应返回非 200 状态码
发生错误时,应该传递符合错误情况的状态码,以便客户端在无需解析响应的情况下判断错误。
正确:
1 |
|
正确:
1 |
|
6. 提供 api 文档
应该提供 api 文档,以便查阅并使用。
四、分页接口的编写方案
分页是一种常见的需求,可以用于有效地管理大量数据的展示。在 RESTful 下,可以这么设置分页接口:
使用查询参数传递分页要求
1
GET /api/resources?page=2&limit=10
响应中,除了数据外,额外提供分页元数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14{
"data": [
{
"id": 1,
"name": "Resource Name 1"
},
{
"id": 2,
"name": "Resource Name 2"
}
],
"total": 50,
"page": 2
}如果不传递分页参数,则默认进行分页,以保证接口响应的一致性,并避免潜在的性能问题