REST:根据 RFC 2616 HTTP/1.1 规范正确的响应状态?

标签 rest http http-status-codes rfc http-1.1

我在 RFC-2616 浏览了 HTTP/1.1 协议(protocol)规范。我试图了解调用特定 REST 方法时应返回哪个状态代码。就我研究的协议(protocol)(链接)而言,我尝试将 REST 方法解析为正确的状态代码:

  • 得到
    • 返回200 (ok)如果至少找到一个资源。
    • 如果没有找到(即返回空列表),我是否应该返回 204(未找到)
  • 放置
  • 邮寄
    • 与 PUT 方法相同,不同之处在于 201 (created)如果新资源已添加到源,则返回
    • 基于常见的recommendation , POST 用于创建新资源,PUT 用于修改现有资源。如果我决定遵循此建议,那么在尝试修改现有资源 ex 时我应该返回什么。 POST api/v1/person/1?
  • 补丁
    • 与 PUT 方法相同,不同之处在于它不像 PUT 那样替换整个资源,而是部分修改资源
    • W3 协议(protocol)中没有关于 PATCH REST 方法的字样 RFC-2616 , 它应该像 PUT 一样对待吗?
  • 删除
    • 返回200 (ok)如果资源被删除并且 [204 (not found)] 如果不存在要删除的资源(id not found)。在 REST 实现的情况下,它是否复制 GET 响应原则?

我的“表”是否正确(尤其是带引号的语句 ?只有 GET 应该在正文中返回请求本身,其余方法只是一个 URI 链接到一个标题中包含修改后的资源(新增、修改..)?

我的理解是否正确,是否存在另一个官方推荐(或者我们“有义务”)遵循的描述 REST 方法的来源?我对各种来源感到很困惑,这些来源给我对每种方法的不同答案以及这个非常冗长的 RFC-2616协议(protocol)。

最好的办法是有一个表格,简要而清楚地描述所有这 5 种方法,包括返回状态、正文内容和标题的可能性。

最佳答案

来自 RFC 7230

This HTTP/1.1 specification obsoletes RFC 2616

因此,任何为状态代码制定模式的尝试都应该从那里开始

Is my "table" correct

不是真的;查看 Stop Making it Hard 中 Kropat 的(非官方)流程图.

关于REST:根据 RFC 2616 HTTP/1.1 规范正确的响应状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46016352/

相关文章:

http - 重定向 url 时如何修复 wget 下载文件名

REST:资源处于错误状态——我应该返回哪个 HTTP 状态?

java - 如何使用 Retrofit 和 GSON 解析 [] 包围的 JSON 对象列表?

javascript - 如何使用JS获取HTTP响应头?

css - 在网页中导入许多谷歌字体

java - 是否可以返回不是来自 Spring MVC 中的 HttpStatus 枚举的 HttpStatus 状态

http - 406 负载格式 Not Acceptable ?

api - 来自数据库表的 REST 资源

java - 仅使用四种 HTTP 方法创建任何类型的 RESTful API?

c# - Azure App Insights API 在 C# 中使用查询获取跟踪