如果对其他实体的引用失败,POST请求是否应该返回404?

ehd*_*hdv 7 api rest

我正在构建对名词进行操作的API Foo。当呼叫者Foo使用POST请求创建的实例时,要求他们为第二个名词提供ID Bar。如果他们提供的ID是正确的类型,但是没有Bar提供该ID,那么404是正确的响应吗?

EJK*_*EJK 6

我建议使用HTTP 400(错误请求)。

参见http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1。可以将400解释为客户端未正确形成请求的一般指示。

还可以提出返回500响应的理由。如果客户端认为Bar引用有效,则服务器无法处理此请求可以视为异常。例如,如果引用有效,则可能发生这种情况,但是另一个客户端将其删除。在这种情况下,第一个客户端没有做任何错。

  • 仅当处理是由于服务器本身上的配置错误(即内部服务器错误)导致的,而没有客户端的错误时,才可以提出500响应的情况。如果客户端发送的数据不正确,则需要400系列中的响应代码。 (2认同)

alf*_*sin 5

简而言之:不。你的 API 应该是“用户友好”的意思,如果出现错误,它应该以用户可以找出问题所在的方式返回它。返回 404 就像说没有找到服务,这是不正确的。响应应该是403 - 因为它可能是客户端尝试接近的具有 ID 的资源属于不同的客户端!

此外,响应应包含可由客户端解析和分析的错误消息/代码(在正文中)。

  • 只有当处理是由于服务器本身的错误配置(即内部服务器错误)造成的,而没有客户端的故障时,才可以证明 500 响应是合适的。如果客户端发送错误数据,则需要 400 系列中的响应代码。 (2认同)

git*_*rik 5

我认为这取决于ID是否在URL中。URL是资源的地址,如果ID在URL中并且不存在具有该ID的项,或者您根本不提供该URL,则该URL无效,因此找不到资源,因此这是一个404。

但是,如果ID 不在 URL中,而是在POST请求中的数据中,并且URL是资源的有效地址,则应返回400 Bad Request。