问题 RESTful API POST / DELETE应该在正文中返回什么?


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

  • POST / person / bob / follow
  • DELETE / person / bob / follow

它们应该在体内返回什么?

  1. 您关注的每个人的集合
  2. 你刚跟随/不跟进的人
  3. 状态如{status:“ok”}
  4. 没有。

1127
2017-10-31 14:57


起源

这更像是一种固执己见的方法。在我看来和个人偏好中,我会让HTTP状态200在DELETE的情况下做必要的事情,并且在POST的情况下,身体上有“你刚跟随/不跟随的人”的信息。 - instinct


答案:


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

我建议你什么也不返回,而且这是一个成功的响应(即200 OK或204 No Content)这一事实表明操作是成功的。


7
2017-10-31 15:22





这完全取决于您的app / API设计以及您将与客户/呼叫者定义的合同。但通常情况下,在所有情况下,您都应返回状态代码,以使您的客户端了解结果。

喜欢: respond(ResponseCode::OK, ...)

对于 POST:我将返回'bob'对象,其中包含所有关注者+状态代码
对于 DELETE:我只返回状态代码。


5
2017-10-31 15:11



Bob的所有内容都可以成千上万。这不太理想。 - dB.
你是对的,这就是我说它取决于应用程序设计的原因。但是,假设您正在使用mvc框架(rails,asp.net mvc ...):当您调用PersonController操作时,您的客户端期望接收相同类型的对象(Person)或者至少包含该对象类型。 - yek


通常,对于API,我是道歉者,使用HTTP状态代码而不是始终确定具有代码定义状态。 这意味着您可以按照现有的标准获得答案,任何获得错误代码的人都会大致知道发生了什么/他们必须做什么。 看一下wiki文章 http状态代码 有用的参考手册。

此外,与错误代码一起,并且因为我们正在谈论的API,有关错误的更具描述性的消息是有用的。像错误一样有意义的东西:“Auth token missing”,或者你可能提出的任何标准。

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

关于资源的删除,通常以200(Ok)或202(已接受)返回,并且没有额外信息。

然而,正如@yek所提到的,它在很大程度上取决于API消费者的承诺。最重要的是你要体面地记录API并解释应该是什么样的期望。


3
2018-02-18 02:35