【发布时间】:2014-03-14 17:20:02
【问题描述】:
在我决定提出这个问题之前,我已经搜索了很长时间的答案,但我没有找到任何令人满意的答案。 (例如Examples of the best SOAP/REST/RPC web APIs? And why do you like them? And what's wrong with them?)
问题其实很简单。我有一个名为 Account 的对象/资源。我的 REST API 支持所有带有 GET、POST、PUT 和 DELETE 的 CRUD,并具有适当的错误处理、状态代码等。
此外,我还想公开一个 API(“命令”)来激活和停用选定的帐户资源。 即使“isActive”是帐户的属性,我也不想只使用整个帐户的 CRUD 中的更新。
我知道这样的设计很容易违反 REST 原则并进行 RPC 风格设计:
PUT /api/account/:accountId/activate
PUT /api/account/:accountId/deactivate
那么这个用例的最佳解决方案是什么?
我目前的想法是使用像这样的 PUT 和 DELETE 动词(将其视为子资源),正如这里提出的 http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#restful:
PUT /api/account/:accountId/isActive // 用于激活
DELETE /api/account/:accountId/isActive // 用于停用
你有什么解决方案?
【问题讨论】:
-
我不认为这是一个“RPC”设计。这是一个基于“消息”的设计。虽然,为什么不在第一个例子中 POST 呢?
-
使用 POST 作为非幂等方法似乎是标准的。我仍然不确定这种“命令”案例的最佳设计模式是什么。
-
我发现这个关于“REST-Ful API 设计”youtu.be/oG2rotiGr90 的有趣讨论并使用它定义的规则,例如PUT/PATCH 用于“激活”、“打开”、“安装”等操作。
标签: rest