这很好用,但我不确定它是否是 API 的简洁设计。我找不到关于这个主题的任何建议。
它很好,但它可能会更好。
短版:与其将空消息发布到专用资源,不如将详细消息发布到您希望更改的资源。
长版:任何时候你想弄清楚在 REST 中做什么,正确的起点是考虑如何处理普通的旧网页。
在网络上,您会打开一个包含不同服务器列表的页面;这些服务器中的每一个都可能具有某种状态指示器,以及您可能想要进行的每个更改的链接。点击该链接会将您带到一个表单,该表单可能已预先填充了数据。您将更改任何必要的默认值,然后提交表单,浏览器将创建 HTTP 请求,告诉 Web 服务器重新启动服务器 #7,或其他任何内容。多田。
请注意,浏览器和人类都不需要事先知道要使用哪个 URI,因为该信息包含在网页的表示中。浏览器需要知道链接是如何工作的,以及表单是如何工作的。人类需要知道要遵循哪个链接,以及如何解释表单中的输入控件,但决定标识符是什么以及应该使用哪些键/值对的是服务器在请求正文中,等等。
鉴于此,您如何确定表单操作的目标应该是什么?一种可能的答案是考虑缓存的含义。 RFC 7234 说成功的 POST 将 invalidate 目标 uri 的任何缓存表示。因此,如果您将请求发布到您希望被请求更改的网页,那么您将“免费”获得适当的缓存行为。
缓存失效规则不灵活 - 它们旨在支持常见情况。如果您有许多将被请求更改的缓存页面,那么您需要选择其中哪一个对更新最重要。
将这些想法与您的案例相匹配:您的表单更改的最重要的文档可能是/api/servers/{id},因此该文档应该是您的表单提交的目标
POST /api/servers/1
Content-Type: text/plain
STOP
POST /api/servers/1
Content-Type: text/plain
START