restful接口版本管理 restful api接口风格_restful



这里写目录标题

  • 一、协议、域名和版本
  • 二、 URI(统⼀资源标识符)
  • 三、HTTP动词
  • 1、案例
  • 四、过滤信息(Filtering)
  • 五、状态码(Status Codes)
  • 六、错误处理
  • 七、返回结果


它是一种web软件结构的API开发风格,注意它仅仅只是代表着一种风格,并不代表着约束、标准。

一、协议、域名和版本

尽量使⽤https协议,使⽤专属域名来提供API服务,并在URL⾥标注api版本,如下

https://api.example.com/v1
https://www.example.com/api/v1

二、 URI(统⼀资源标识符)

在RESTful架构中,每个⽹址代表⼀种资源(resource),这个⽹络地址就是URI(uniform resource identifier), 有时也被称为URL(uniform resource locator)。因为URI对应⼀种资源,所以⾥⾯不能有动词,只能有名词⼀般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使⽤复数。

https://api.example.com/v1/users ⽤户列表资源地址

https://api.example.com/v1/users/{id} ⽤户id=5资源。注意:这⾥是users/5,⽽不是user/5,API中的名词应该使⽤复数。⽆论⼦资源或者所有资源。

https://api.example.com/v1/users/{id}/articles ⽤户id=5发表的⽂章列表

非RestFul设计,以往我们都会这么写:

http://xxx.com:8080/get/getArticle (查询文章)
http://xxx.com:8080/post/addArticle (新增文章)
http://xxx.com:8080/update/updateArticle (更新文章)
http://xxx.com:8080/delete/deleteArticle (删除文章)

RestFul设计风格:

GET http://xxx.com:8080/get/articles(查询文章)
POST http://xxx.com:8080/post/articles(新增文章)
PUT http://xxx.com:8080/update/articles(新增文章)
DELETE http://xxx.com:8080/dalete/articles(删除文章)

三、HTTP动词

对于资源的具体操作类型,由HTTP动词表示。
常⽤的HTTP动词有下⾯五个(括号⾥是对应的SQL命令)

GET(select):获取数据,列表和详情
POST(create):创建资源
PUT(update):全部更新资源
PATCH(update):局部更新资源
DELETE(delete):删除资源

1、案例

GET /students 列出所有的学生
POST /students 创建学生
GET /students/pk 获取某个学生的信息
PUT /students/pk 更新某个学生的信息
PATCH /students/pk 更新某个学生的部分信息
DELETE /students/pk 删除某个学生的信息

四、过滤信息(Filtering)

如果记录数量很多,服务器不可能都将它们返回给⽤户。API应该提供参数,过滤返回结果。
下⾯是⼀些常⻅的参数。

?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第⼏⻚,以及每⻚的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件

五、状态码(Status Codes)

服务器向⽤户返回的状态码和提示信息,常⻅的有以下⼀些(⽅括号中是该状态码对应的
HTTP动词)。
200 OK - [GET]:服务器成功返回⽤户请求的数据
201 CREATED - [POST/PUT/PATCH]:⽤户新建或修改数据成功。
202 Accepted - [*]:表示⼀个请求已经进⼊后台排队(异步任务)
204 NO CONTENT - [DELETE]:⽤户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:⽤户发出的请求有错误,服务器没有进
⾏新建或修改数据的操作

401 Unauthorized - [*]:表示⽤户没有权限(令牌、⽤户名、密码错误)。
403 Forbidden - [*] 表示⽤户得到授权(与401错误相对),但是访问是被禁⽌的。
404 NOT FOUND - [*]:⽤户发出的请求针对的是不存在的记录,服务器没有进⾏操作,
406 Not Acceptable - [GET]:⽤户请求的格式不可得(⽐如⽤户请求JSON格式,但
是只有XML格式)。

410 Gone -[GET]:⽤户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 当创建⼀个对象时,发⽣⼀个验证
错误。

500 INTERNAL SERVER ERROR - [*]:服务器发⽣错误,⽤户将⽆法判断发出的请求是
否成功。

六、错误处理

如果状态码是4xx,服务器就应该向⽤户返回出错信息。⼀般来说,返回的信息中将error作为键名,出错信息作为键值即可。

{
 error: "Invalid API key"
}

七、返回结果

GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新⽣成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回⼀个空⽂档