RESTful API设计规范学习

2020-02-20

在RESTful设计规范里,第一个接口被认为是一个资源请求

路径设计注意事项

  • 资源名使用复数
  • 资源名使用名词
  • 路径内不带特殊字符
  • 避免多级URL

URL

URL表示资源,资源一般对应服务器端领域模型中的实体类

URL规范

  • 不用大写
  • 用中杠- 不用下杠_
  • 参数列表要encode

新增资源

使用POST定义,数据通过RequestBody方式进行传递

示例:

https://api.my.com/v1/users

删除资源

使用DELETE定义接口,删除单个资源,将资源的主键值通过路径方式传递给接口;删除多个资源时通过RequestBody方式传递数据。

示例:

批量删除 https://api.my.com/v1/users 单个删除 https://api.my.com/v1/users/{id}

更新资源

使用PUT定义接口。

示例:

https://api.my.com/v1/users/{id}

查询单个资源

使用GET定义接口。

示例:

https://api.my.com/v1/users/{id}https://api.my.com/v1/users?name={name}

分页查询资源

使用GET定义接口。

示例:

https://api.my.com/v1/users?page=1&size=20&name={name}

动作资源

使用POST定义接口。有动作性的修改某一个资源的元素内容,比如重置密码。

示例:

https://api.my.com/v1/users/{id}/actions/forget-password 其中用户唯一标识在请求路径中进行传递,修改后的密码通过RequestBody方式进行传递。

安全性和幂等性

  1. 安全性:不会改变资源状态,可以理解为只读的;
  2. 幂等性:执行1次和执行N次,对资源状态改变的效果是等价的

请求方式

安全性

幂等性

GET(SELECT)



POST(CREATE)

×

×

PUT(UPDATE)

×


DELETE(DELETE)

×


数据返回格式

请求方式

response格式

GET

单个对象、集合

POST

新增成功的对象

PUT/PATCH

更新成功的对象

DELETE


json格式的约定

  1. 时间用长整形(毫秒数),客户端自己按需解析
  2. 不传null字段

版本号

版本号用于区分api接口的各个版本,比较流行的是接口路径、头信息两种方式。

**1. 接口路径方式 **

示例:

https://api.my.com/v1/users/1

https://api.my.com/v2/users/1

2. 头信息方式

可以将访问接口版本通过HttpHeader方式进行传递,在网关根据提取到的头信息进行控制转发,这种方式资源路径的展现形式不会因为版本的不同而变化。
版本头信息的Key可以根据自身情况进行定义,推荐使用Accpet形式。

状态码

在接口设计时我们需要通过HttpStatus请求的状态码来判断一个请求发送状态,本次请求是否有效,常见HttpStatus状态码如下所示:

状态码

说明

200

请求成功

201

新资源创建成功

204

没有任何内容返回

400

传递的参数格式不正确

401

没有权限访问

403

资源受保存

404

访问的路径不正确

405

访问方式不正确,GET请求使用POST方式访问

410

地址已经被转移,不可用

415

要求接口返回的格式不正确,比如:客户端需要JSON格式,接口返回的是XML

429

客户端请求次数超过限额

500

访问的接口出现系统异常

503

服务不可用,服务一般处理维护状态

请求头

用于存放请求格式信息、版本号、token密钥、语言等信息

{
    Accept:'application/json',
    version:'v1.0',
    Authorization:'Bearer {access_token}',
    language:'zh'
}