宁静的终点命名约定



我知道休息端点应该是名词而不是动词,但有时允许轻微的偏差吗?

想象一个应该发布产品的端点(在网页上可见,也许在队列中添加一些东西)。

我可以提出两种解决此问题的方法。

1)将API/Products/1/Publish放置 - 我喜欢它,因为它是明确的,避免了后端的复杂性,并记录了它的自我。

2)补丁/put/patch api/products/1

{
  "color": "green",
  //some properties removed for brevity
  "ispublished" : true
}

第二种方法要求后端服务以跟踪邮局上的ISPEAPTION字段,并且当该领域变为true时,请开始出版过程。这感觉更复杂,更加保持。

所以我的问题是,从休息的角度使用第一种方法可以吗?有一些大弊端吗?

技术上没有什么可以阻止您按照RPC样式在URL中使用动词。概念上这不是应该如何设计的休息。

休息代表 re 介绍 s TATE T Ransfer。这种体系结构样式是针对资源的,并且是独立的,但它是通过HTTP协议实现的

在通过HTTP协议实施REST应用程序时,由URI确定资源,并且对此类资源的操作通过HTTP方法表示(不需要任何其他动词)。要更改资源的状态,您应该将资源的新状态表示到服务器。表示形式可以是JSON,XML或任何其他能够表示资源状态的格式。请参阅下面的引用:

5.2.1.2表示

REST组件通过使用表示形式捕获该资源的当前或预期状态并在组件之间传输该表示形式,从而在资源上执行动作。表示形式是一个字节的序列,再加上表示这些字节的表示。代表的其他常用但不太精确的名称包括:文档,文件和HTTP消息实体,实例或变体。

[...]给定表示形式可以指示所请求的资源的当前状态,所请求的资源的所需状态或其他资源的值[...]

遵循此方法,product资源可能具有status子资源。根据您的需要,status可以具有不同的值,例如draftpublishedinactive ...

然后使用 PUT用在请求有效载荷中发送的JSON替换status子资源的状态:

PUT /api/products/1/status HTTP/1.1
Host: example.org
Content-Type: application/json
{
  "value" : "published"
}

最新更新