【问题标题】:What should a RESTful API POST/DELETE return in the body?RESTful API POST/DELETE 应该在正文中返回什么?
【发布时间】:2011-10-31 14:57:45
【问题描述】:

要通过 RESTful API 关注和取消关注一个人,我有

  • 发布 /person/bob/follow
  • 删除 /person/bob/follow

这些应该在体内返回什么?

  1. 您关注的所有人的集合
  2. 你刚刚关注/取消关注的人
  3. 像 { status: "ok" }
  4. 这样的状态
  5. 什么都没有。

【问题讨论】:

  • 这更像是一种固执己见的方法。在我的观点和个人偏好中,我会让 HTTP 状态 200 在 DELETE 和正文的情况下完成必要的工作,并在 POST 的情况下提供“您刚刚关注/取消关注的人”的信息。

标签: rest


【解决方案1】:

如果您使用 HTTP 服务器状态响应错误,则状态代码不会说明任何内容。如果您在没有用户 Bob 的情况下以 404 Not Found 响应,或者在数据库损坏的情况下以 500 Internal Server Error 响应,那么您将获得的唯一成功响应是 OK。用户无需查看状态码,只需查看HTTP状态码即可。

我建议你什么都不返回,如果是成功响应(即200 OK或204 No Content)就说明操作成功了。

【讨论】:

    【解决方案2】:

    这完全取决于您的应用程序/API 设计以及您要与客户端/调用方定义的合同。但一般来说,在所有情况下,您都应该返回状态码,让您的客户知道结果。

    点赞:respond(ResponseCode::OK, ...)

    对于POST:我会返回包含他所有关注者 + 状态码的“bob”对象
    对于DELETE:我只会返回状态码。

    【讨论】:

    • Bob 的所有关注都可能是成千上万的事情。这不太理想。
    • 你是对的,这就是为什么我说这取决于应用程序设计。但是,假设您使用的是 mvc 框架(rails、asp.net mvc...):当您调用 PersonController 操作时,您的客户端期望接收相同类型的对象(Person)或至少包含该对象类型。
    【解决方案3】:

    一般来说,对于 API,我很抱歉使用 HTTP 状态代码,而不是始终使用代码定义状态的 OK。 这意味着您可以遵循现有的答案标准,任何收到错误代码的人都会大致知道发生了什么/他们必须做什么。 查看 wiki 文章 http status codes 以获取可用的参考手册。

    此外,连同错误代码,由于是我们正在讨论的 API,因此提供关于错误的更具描述性的消息很有用。一些有意义的东西,比如错误:“Auth token missing”,或者你可能想出的任何标准。

    在创建资源时,我通常会回复 201(已创建)和刚刚创建的资源。请记住,您可能希望从资源中排除某些属性(例如,您正在创建一个用户,您不应返回加密密码等敏感信息)

    关于删除资源,一般返回 200(Ok)或 202(Accepted),没有额外信息。

    尽管如此,正如@yek 所提到的,这在很大程度上取决于与 API 使用者的承诺。最重要的是您要体面地记录 API 并解释预期应该是什么。

    【讨论】:

      猜你喜欢
      • 2014-11-16
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多