假设我需要在我的数据库中插入一条记录,该记录具有外键约束给客户端提供不存在的id的另一个实体。
显然,我检查是否存在上述外键。我应该返回404
状态代码还是422 - Unprocessable Entity
更合适的响应代码?
答案 0 :(得分:1)
根据https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5,404用于以下情况:
- 请求-uri不匹配
- 他的服务器并不想透露请求被拒绝的原因
- 没有其他适用的答复
因此,我会使用422。
答案 1 :(得分:1)
首先要确定它是服务器(5xx)还是客户端(4xx)错误。您可以说服务器只执行客户端要求它执行的操作,因此它是客户端错误,但为什么客户端期望id存在?服务器出了问题吗?先前有错误导致错误的HTTP状态代码在尝试创建缺少ID的实体时被发送到客户端吗?您是否可以发现这样的错误,因此您不需要处理这种情况,因为它可能不存在?
客户不是在寻找一些东西,所以我不认为404是一个合适的回应。如果客户端要插入,那么404应该永远不会发生,因为客户端尚未创建资源的原始状态。
409是针对资源状态的问题,但问题实际上是关于缺少的另一个资源的状态。 409需要返回信息以允许调用者解决冲突。如果客户端从服务器获得409,客户端是否可以创建缺少的ID?
428看起来像候选人,因为请求是以缺少id的存在为条件的,但它要求响应包含有关如何解决问题的信息。
它真的是关于服务器如何告诉客户端如何解决问题。如果可以的话,选择最好的4xx代码,让服务器做到这一点。如果它可能无法告诉客户它已经完成了它不应该拥有并返回5xx的东西,允许标记和处理该资源(对客户来说很重要)不同。