restful规范
什么是restful
首先restful是一种软件架构风格或者说是一种设计风格,并不是标准,它只是提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。
就像设计模式一样,并不是一定要遵循这些原则,而是基于这个风格设计的软件可以更简洁,更有层次,我们可以根据开发的实际情况,做相应的改变。
restful设计规范如下:
一、协议
在url接口中推荐使用Https协议,让网络接口更加安全(Https是Http的安全版,SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL(安全套接层协议))
二、域名
应该尽量将API部署到专用域名之下(存在跨域问题),例如 https://api.cnblogs.com
可以放在主域名之下,例如 https://www.cnblogs.com/api/
三、版本
可以将版本号放在HTTP头信息中或放入URL中,例如 https://https://www.cnblogs.com/api/v1/
四、路径
restful 提倡面向资源编程,所以在url接口中尽量要使用名词,不要使用动词
例如 https://www.cnblogs.com/news/
五、HTTP动词
可以根据Http不同的method,进行不同的资源操作
- GET:从服务器取出资源(一项或多项)。
- POST:在服务器新建一个资源。
- PUT:在服务器更新资源(客户端提供改变后的完整资源)。
- PATCH:在服务器更新资源(客户端提供改变的属性)。
- DELETE:从服务器删除资源。
六、过滤信息
如果记录数量很多,服务器不可能都将它们返回给用户,API会提供参数,过滤返回结果,常见的参数有:
- https:www.cnblogs.com/api/v1/?limit=10 指定返回记录的数量
- https:www.cnblogs.com/api/v1/?offset=10 指定返回记录的开始位置
- https:www.cnblogs.com/api/v1/?page=3&per_page=20 指定第几页,每页显示多少条记录
七、状态码
响应应该包含状态码,常见的状态码如下:
- 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)
- 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格式)
- 410Gone -[GET]:用户请求的资源被永久删除,且不会再得到的
- 422Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误
- 500INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功
八、错误处理
如果状态码为4xx,就会返回错误信息,一般返回的错误信息中将error作为键名,错误信息作为键值
九、返回结果
针对不同操作,服务器向用户返回不同的结果,而且格式应该统一为json格式
十、Hypermedia API
返回结果中要提供帮助链接,即API最好做到Hypermedia。使用户不查询文档,也知道下一步应该怎么做