它是一种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:返回⼀个空⽂档
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74019.html