【发布时间】:2014-08-06 04:07:42
【问题描述】:
我想为以下场景使用适当的方法设计我的休息端点。
有一个群。每个组都有一个状态。该组可以由管理员激活或停用。
我应该把我的终点设计成
PUT /groups/api/v1/groups/{group id}/status/activate
或
PATCH /groups/api/v1/groups/{group id}
with request body like
{action:activate|deactivate}
【问题讨论】:
-
两者都很好。但是请查看 JSON PATCH 格式的 RFC (tools.ietf.org/html/rfc6902)。 PATCH 期望为有效负载获取某种差异/补丁文档(原始 JSON 不是其中之一)。
-
@JørnWildt 不,PUT 将是一个可怕的选择。你在那儿放什么? PATCH 是唯一明智的选择。好吧,在这种情况下,您可以使用问题中提供的 PATCH 格式,而只需使用 PUT 方法; PUT 示例是错误的。
-
将一个或多个属性公开为客户端可以通过 PUT 获取和修改的独立资源并没有错。但是,是的,URL 应该是 /groups/api/v1/groups/{group id}/status 您可以将“活动”或“非活动”或 GET 放入其中以读取当前状态。
-
这里很好地解释了应该如何真正使用 PATCH:williamdurand.fr/2014/02/14/please-do-not-patch-like-an-idiot
-
"
activate" 不是足够的 RESTful 结构。您可能正在尝试将status更新为“活动”或“非活动”。在这种情况下,您可以使用正文中的“active”或“deactive”字符串修补到.../status。或者,如果您尝试更新status.active的布尔值,您可以使用正文中的布尔值 PATCH 到.../status/active
标签: http rest http-put http-method http-patch