【问题标题】:REST API design for commands [closed]命令的 REST API 设计[关闭]
【发布时间】:2020-10-24 17:24:33
【问题描述】:

我有多个服务器,我正在构建一个应用程序来控制它们、检查它们的状态等。我想创建一个端点来允许我打开/关闭服务器,但是我不知道如何正确设计 REST API。

目前,假设我有一个Server 资源,控制它的端点是/api/servers/{id}/start/api/server/{id}/stop。只需发送一个空的 POST 请求来打开和关闭服务器即可使用它们。

这很好用,但我不确定它是否是 API 的简洁设计。我找不到关于这个主题的任何建议。

在这种情况下你会推荐什么方法?

谢谢!

【问题讨论】:

  • 这是基于意见,投票结束

标签: spring-boot rest restful-url


【解决方案1】:

这很好用,但我不确定它是否是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2017-04-28
    • 2017-02-20
    • 2012-12-28
    • 1970-01-01
    相关资源
    最近更新 更多