【问题标题】:Assign a ressource should be what http verb in a REST API分配资源应该是 REST API 中的 http 动词
【发布时间】:2014-02-05 20:17:23
【问题描述】:

我正在下面的控制器中执行附加和分离操作,例如将关系从 OU 分离到 ModuleDevice。

这些操作在 REST API 中意味着什么 http 动词?

ModuleDevicesToOUController

Api/ModuleDevicesToOU/1/OU/1 // Attach for ModuleDevice with Id 1 the OU with Id 1
PUT/Delete/Patch ??? Attach…

Api/ModuleDevicesToOU/1/OU/1// Detach for ModuleDevice with Id 1 the OU with Id 1
PUT/Delete/Patch ??? Detach…

【问题讨论】:

    标签: rest asp.net-web-api restful-architecture httpverbs


    【解决方案1】:

    使用 LINK 方法怎么样? https://datatracker.ietf.org/doc/html/draft-snell-link-method-08

    如果这对您来说有点实验性,那么只需使用 POST。

    【讨论】:

    • 我意识到我误解了要求。现在看到客户端的 SAVE 方法是一个 POST 并且这个 POST 包括在一个 http 操作中删除/添加实体的子引用。但是我将来也必须使用 LINK 来获取真正的 rest api ;-)
    【解决方案2】:

    如果我正确理解您的 API,则该调用正在更改服务器上的资源,这意味着您应该使用 POST:

    根据 RFC 2616,POST 方法应用于 一个请求是非幂等的:也就是说,它会导致 每次执行时的服务器状态,例如提交评论 到博客文章或在线投票中投票。在实践中,GET 通常是 保留,不仅适用于幂等动作,而且适用于无效动作, 没有副作用的(与“第二次没有副作用”相反 或未来的请求”与幂等操作一样)

    http://en.wikipedia.org/wiki/POST_%28HTTP%29

    http://en.wikipedia.org/wiki/Http

    在我看来,这是 GET 和 POST 之间的区别非常重要的一点。 POST 不仅允许您在正文中发送信息,还可以修改服务器的状态。在设计 REST 接口时,我始终牢记这一点。

    希望对你有帮助。

    【讨论】:

    • 为什么发帖? “PUT 是幂等的,所以如果你 PUT 一个对象两次,它就没有效果。”当我附加/分离两次时没有效果。因为它已经被附加/分离。你怎么看?
    • 如果对这两个操作都使用 POST,我不能将它们放在同一个控制器中,因为它们现在是双重的,这没有意义并且不会编译!
    • @Elisa:这就是为什么我说我可能理解错了你的 API。我不太确定您的附加和分离是如何工作的。如果您不期望得到响应,您也可以使用 PUT,您是对的,但请仔细阅读限制 (tools.ietf.org/html/rfc2616#section-9.6)
    • @Elisa:您可能无法获取自己的错误消息,您将不得不使用 HTTP 错误代码来了解一切是否正常。在实现 REST 接口时,我很少使用 PUT,因为它使实现基于 DTO 的自己的通信协议变得更加困难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多