【Django】RESTful API接口设计风格

它是一种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):在服务器更新资源(客户端提供改变后的完整资源)。
DELETE(DELETE):从服务器删除资源。

还有三个不常⽤的HTTP动词。

PATCH(UPDATE):在服务器更新(更新)资源(客户端提供改变的属性)。
HEAD:获取资源的元数据。
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

四、过滤信息(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:返回⼀个空⽂档

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/YZL40514131/article/details/125457830