rest api 设计规范

什么是REST API

一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

请求方法解释

方法

描述

返回

是否幂等

PATCH

Create/Modify the resource with JSON Merge Patch

200-OK, 201-Created

False

PUT

Create/Replace the whole resource

200-OK, 201-Created

True

POST

Create new resource (ID set by service)

201-Created with URL of created resource

False

POST

Action

200-OK, 204-No Content (only when nothing returned in response body)

False

GET

Read (i.e. list) a resource collection

200-OK

True

GET

Read the resource

200-OK

True

DELETE

Remove the resource

204-No Content; avoid 404-Not Found

True

常见的 API 模式

网址结构

单个资源

https://.../<resource-collection>/<resource-id>

多个资源

https://.../<resource-collection>

示例

  • GET /zoos:列出所有动物园

  • POST /zoos:新建一个动物园

  • GET /zoos/ID:获取某个指定动物园的信息

  • PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)

  • PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)

  • DELETE /zoos/ID:删除某个动物园

  • GET /zoos/ID/animals:列出某个指定动物园的所有动物

  • DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物

执行操作

REST 规范用于对资源的状态进行建模,主要用于处理 CRUD(创建、读取、更新、删除)操作。但是,许多服务需要对资源执行操作的能力,例如获取图像的缩略图或重新启动 VM。有时对集合执行操作也很有用。

规则一

在 Azure 中,我们建议通过将“:”后跟操作谓词追加到最终路径段来区分操作操作

对一个资源进行操作时候应该按照如下方式

POST https://.../<resource-collection>/<resource-id>:<action>?<input parameters>

example:

https://.../users/Bob:grant?access=read

对一个资源集合进行操作时候

POST https://.../<resource-collection>:<action>?<input parameters>

example

https://.../users:grant?access=read

注意:为了避免操作和id重复,应该避免在id中使用“:”号

  • 对资源或集合的任何操作应该使用使用 POST

  • 支持Repeatability-Request-ID和Repeatability-First-Sent请求头,如果重试发生时动作需要幂等

  • action应该是动词

  • 禁止在当操作行为可以合理地定义为标准 REST 创建、读取、更新、删除或列表操作之一时使用该方式

  • 参数多的时候可以放到body

规则二

POST https://.../<resource-collection>/<resource-id>/<action>?<input parameters>

example

https://.../services/1/restart

API Versioning

  • 在发布新的预览版时,服务团队可能会在给客户至少 90 天的时间来升级他们的代码后,完全淘汰任何以前的预览版

  • 不要在任何操作路径中包含版本号段。

  • 从预览 API 过渡到 GA API 时,请勿使用相同的日期。如果预览版 api-version 为 '2021-06-04-preview',则 API 的 GA 版本必须晚于 2021-06-04 的日期

  • 不要将预览功能保留超过 1 年;它必须在引入后 1 年内 GA(或被删除)。

示例

PUT https://service.azure.com/users/Jeff?api-version=2021-06-04

PUT https://service.azure.com/users/Jeff?api-version=2021-06-04-preview

发现 API 版本的示例请求

OPTIONS /?comp=list HTTP/1.1

host: accountname.blob.core.azure.net

示例响应

200 OK

api-supported-versions: 2011-08,2012-02,1.1,2.0

api-deprecated-versions: 2009-04,1.0

Content-Length: 0

长时间运行的操作

基于资源的长时间运行的操作(RELO)

  • 客户端向资源发送初始请求以启动长时间运行的操作。此初始请求可以是 PUT、PATCH、POST 或 DELETE 方法。

  • 资源验证请求并启动操作处理。它使用 200-OK HTTP 状态代码(如果操作是创建操作,则为 201-Created)和资源表示形式向客户端发送响应,其中状态字段设置为指示操作处理已开始的值.

  • 客户端然后向资源发出 GET 请求以确定操作处理是否已完成。资源以资源的表示进行响应。当操作仍在处理中时,状态字段将包含一个“非终端”值,如处理中。

  • 操作处理完成后,来自客户端的 GET 请求将收到响应,其中状态字段包含“终端”值——Succeeded、Failed 或 Canceled——指示操作的结果。

带有状态监视器的长时间运行的操作(LRO)

在具有状态监视器的 LRO 模式中,操作的状态和结果被封装到状态监视器资源中,该资源不同于目标资源并且特定于单个操作请求。下面是状态监视器 LRO 模式的样子

  • 客户端发送请求以启动长时间运行的操作。与 RELO 模式一样,初始请求可以是 PUT、PATCH、POST 或 DELETE 方法。

  • 资源验证请求并启动操作处理。它使用 202-Accepted HTTP 状态代码向客户端发送响应。此响应中包含一个 Operation-location 响应标头,其中包含此特定操作的状态监视器的绝对 URL。该响应还包括一个 Retry-after 标头,告诉客户端在向状态监视器 URL 发送请求之前等待的最短时间(以秒为单位)。

  • 状态监视器 URL 响应有关操作的信息,包括其当前状态,应表示为名为 status 的字段中一组固定的字符串值之一。如果操作仍在处理中,状态字段将包含一个“非终端”值,如Processing。

  • 操作处理完成后,对状态监视器 URL 的 GET 请求会返回一个响应,其中的状态字段包含一个终端值——Succeeded、Failed 或 Canceled——指示操作的结果。如果状态为Failed,则状态监视器资源必须包含一个错误字段,其中包含描述失败的代码和消息。如果状态为成功,则响应可能包含适当的附加字段,例如processing。

推荐的命名规范

以下是 Azure 服务的建议命名约定:

  • 在同时包含名词和形容词的名称中,应将形容词放在名词之前

For example, collectedItems not itemsCollected

  • 对具有明确度量单位(如 bytes, miles等)的值使用度量单位的后缀。在适当的情况下,使用普遍接受的单位缩写(例如“Km”而不是“Kilometers”)

  • 使用 int 表示持续时间,并在名称中包含时间单位

For example, expirationDays as int and not expiration as date-time.

  • 不要在布尔值的名称中使用“is”前缀,例如“enabled”而不是“isEnabled”。

  • 不要在名称中使用多余的单词,例如/phones/number 而不是 phone/phoneNumber.

通用名称

名称

描述

createdDateTime

创建资源的日期时间

updatedDateTime

上次更新/修改资源的日期时间

kind

多态资源的鉴别器值

Below is an example of JSON for a Rectangle and Circle: Rectangle

{

"kind": "rectangle",

"x": 100,

"y": 50,

"width": 10,

"length": 24,

"fillColor": "Red",

"lineColor": "White",

"subscription": {

"kind": "free"

}

}

Circle

{

"kind": "circle",

"x": 100,

"y": 50,

"radius": 10,

"fillColor": "Green",

"lineColor": "Black",

"subscription": {

"kind": "paid",

"expiration": "2024",

"invoice": "123456"

}

}

分页

返回资源集合的操作必须考虑分页。REST API背后的数据库可能非常庞大。所以不要尝试一次获取所有请求的数据,造成占用资源太长时间。建议最大分页数量不超过1000

参考文档

https://github.com/Microsoft/api-guidelines

https://github.com/microsoft/api-guidelines/blob/vNext/azure/Guidelines.md#http-request--response-pattern

https://github.com/microsoft/api-guidelines/blob/vNext/azure/ConsiderationsForServiceDesign.md

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
REST(Representational State Transfer)是一种基于HTTP协议的软件架构风格,用于构建分布式系统和Web服务。REST API是一种基于REST风格的API,通过定义URL、HTTP方法和数据格式(如JSON或XML)等规范,实现了客户端和服务器之间的通信和数据交换。 REST API的特点包括: 1. 资源:REST API将每个数据实体都看作是一个资源,每个资源都有一个唯一的标识符(URI)。 2. HTTP方法:REST API使用HTTP方法(如GET、POST、PUT、DELETE等)来定义对资源的操作。 3. 数据格式:REST API通常使用JSON或XML等数据格式进行数据交换。 4. 无状态:REST API不保存客户端的状态,每个请求都是独立的。 5. 可缓存:REST API支持缓存机制,可以在客户端或者代理服务器上缓存响应结果,提高性能和响应速度。 6. 分层系统:REST API支持分层系统架构,可以将系统分成多个层次,每个层次都有自己的功能和责任。 REST API的优点包括: 1. 简单性:REST API使用HTTP协议和简单的数据格式,易于理解和使用。 2. 可伸缩性:REST API支持分布式系统和分层系统架构,可以实现高度的可伸缩性和可扩展性。 3. 可读性:REST API使用简单的URL和HTTP方法进行定义,易于阅读和理解。 4. 可测试性:REST API可以使用工具(如Postman等)进行测试和调试。 5. 可移植性:REST API可以在不同的编程语言和平台上进行使用和实现。 总之,REST API是一种简单、可伸缩、可读、可测试和可移植的API设计风格,适用于构建分布式系统和Web服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值