Restful API 设计原则及其规范
来源:互联网 发布:java 两list合并 编辑:程序博客网 时间:2024/05/16 12:46
关于 HTTP 动词以及状态码的运用
在此说明一下,此处介绍的允许返回的状态码,仅包含了执行成功的状态码,而没有包含服务器异常、没有权限、参数校验失败等异常状态下的状态码
关于异常情况下 HTTP 返回状态码的说明
关于 URL 的设计原则
关于 URL 的设计, 也是本文的重点,下面将一一介绍。
关于资源命名
使用名词而不是动词, 在 Rest API 中,我们应该避免使用动词来作为资源名,对于资源操作的动作应该以 HTTP 动词的形式提供。当然,很多操作时没办法直接用简单的增删改查表示,这时,我们就可以使用 POST 来代替,如: /login, /logout 之类的方法都可以用POST 请求。
使用复数名词而不是单数,例如对于
category
来说,我们应该使用它的复数形式:categories
。- 名称中所有字母都应该使用小写而不是大写。
- 对于多个单词,应该使用
-
(中划线)而不是_
(下划线)或是驼峰方式进行区分,这里解释一下,因为在 URL 链接中,如果使用下划线作为单词分隔的话,对于用户来说不是很好辨别,因为它很可能和空格混淆。
关于 API 的版本
对于将要对外提供服务的 API 来说, 最好规定它的版本,例如:/v1/users ; 这样对于以后升级API 是非常友好的,因为可以同时部署多个版本的API来避免升级后造成的版本不兼容问题。
关于路径的重复定义问题
举例来说,我们可能有两个资源,用户(user)以及用户组(group), 对于某一个组下面的某一个用户来说,可能会设计这样的 API:/v1/groups/{groupId}/users/{userId}
,这就会与定义的用户API重复: /v1/users/{userId}
, 两个 API ,功能都是通过 ID 获取用户,这样就会造成 API 的重复定义,这种情况应该尽量避免。
结语
关于Hypermedia
按照 Restful 风格的指导,我们知道,对于RestAPI,最好做到 Hypermedia, 即在返回值中提供链接,使得用户在不用查询文档的情况下就可以知道下一步该做啥,但在实际的开发中,基本没这样使用过;在实际开发中,一般都会提供 swagger 文档或是其它形式的文档, 这样不仅能提供更详细的信息,而且对于前端开发人员来说,可以直接调用 API 进行测试。所以对于 Hypermedia 来说,此处不展开讲。
关于错误返回值
以下提供我所使用的返回值结构:
{ "message": "错误提示信息", "status": "自定义错误码", "timestamp": "时间戳"}
这个返回值用于所有调用API时的异常情况, 包括权限问题, 参数校验失败或是服务器异常等。
关于正常的返回值
一般情况下,都是直接将资源序列化返回,关于序列化的格式,则根据客户端请求决定,通常都是 json, 但是也可以返回 xml。
结语
以上,就是我对于 Restful API 设计的一些浅薄见解,多有不足之处,望大家多多指正。
最后,以下是根据上述原则而设计的一些 API,大家可以下载源码或是在线查看,当然,其中包含也包含了一些其他的技术,在以后的博客中,我会一一介绍。
这里是源码
- Restful API 设计原则及其规范
- 好RESTful API设计原则
- Restful API 设计参考原则
- RESTful API 设计(规范)指南
- 好RESTful API的设计原则
- 好RESTful API的设计原则
- 好RESTful API的设计原则
- RESTFUL API 的规范
- RESTful api接口规范
- Restful API规范
- RESTful API 编写规范
- restful API接口规范
- RESTful API规范
- restful-api开发规范
- Restful Api接口规范
- Restful API规范
- RESTful Web Services中API的设计原则
- RestFul Api 定义流程规范
- Sicily1000. 自上而下语法分析(一)
- bzoj1225 [HNOI2001] 求正整数 约数个数定理+对数
- Javascript闭包——懂不懂由你,反正我是懂了
- python 切片方法
- xss攻击防御
- Restful API 设计原则及其规范
- React学习笔记_css module
- ConcurrentHashMap的实现 get put remove 详解
- 吸顶条
- ZXECS-IBX1000综合业务交换
- 降维——局部线性嵌入(LLE)
- UVA11988
- 在ros中配置opencv编译环境环境
- KVM更改虚拟机默认存储路径