【Django】RESTful API接口设计风格

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 【Django】RESTful API接口设计风格,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

它是一种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:返回⼀个空⽂档

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123245.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!