如果body中指示的id不存在,那么正确的http错误代码是什么?正确的HTTP错误代码,如果ID传入正文不存在/无效?
例:cityId 123不存在于数据库
POST /profiles
{
"name":"foo",
"cityId":123
}
它是404? 400?或422?
如果body中指示的id不存在,那么正确的http错误代码是什么?正确的HTTP错误代码,如果ID传入正文不存在/无效?
例:cityId 123不存在于数据库
POST /profiles
{
"name":"foo",
"cityId":123
}
它是404? 400?或422?
这取决于你到底,但我要说422
400意味着该请求的格式不正确,这是情况并非如此。该请求在词汇上完全有效,因此您可以解析并处理它。
http://www.restpatterns.org/HTTP_Status_Codes/400_-_Bad_Request
404意味着,请求的URL不存在。资源(即Web服务端点)确实存在。如果ID是URL的一部分,即在查询字符串中,我可能会建议一个不同的答案。 404s仅在我的经验中指的是URL,而不是在POST机构中。另请注意,下面的链接仅在URL的上下文中引用404,而不是在POST正文的内容。
http://www.restpatterns.org/HTTP_Status_Codes/404_-_Not_Found
因此这留下422作为唯一有效的候选。
http://www.restpatterns.org/HTTP_Status_Codes/422_-_Unprocessable_Entity
另一个海报建议204,但由于该请求已被处理,这是不正确的,但一直没有成功。所有2 **状态代码都意味着某种程度的成功。
http://www.restpatterns.org/HTTP_Status_Codes/204_-_No_Content
我会说404,想象试图访问像www.domain.com/profile/35一个URL,根本不存在,你会想到404,所以我相信它应该工作同样的方式。
URL('/ profiles')很好,它是POST有效负载(内容)包含无法处理的数据。 – Andreas
使用404,您可能还需要看看状态码204下面的链接有相同的一个很好的解释。
https://benramsey.com/blog/2008/05/http-status-204-no-content-and-205-reset-content/
你正在使用RESTful Web服务基于HTTP,所以你应该遵循HTTP规范(RFC 7231,RFC 4918,RFC 2616)。
400(错误请求)状态代码表示该服务器不能或 不会请求过程中由于一些被认为是 客户端错误(例如,格式错误请求语法,无效请求 消息成帧或欺骗性请求路由)。
404(未找到)状态代码表示原始服务器并 找不到目标资源的电流表示或不 不愿意透露一个存在。404状态代码不是 指示这种缺少表示是暂时的还是 永久性的;如果 原始服务器大概通过某种可配置的方式知道 该条件可能是永久的,则410(优先)状态代码优先于404。
和老年人,但更明确,请参阅RFC 2616:
服务器没有找到任何匹配的请求URI。没有迹象表明病情是暂时的还是永久性的。如果服务器通过某种内部可配置机制知道旧资源永久不可用并且没有转发地址,则应使用410(Gone)状态码。当服务器不希望揭示请求被拒绝的原因时,或者没有其他响应适用时,通常使用此状态码。
的422(无法处理的实体)状态代码表示该服务器 理解请求实体的内容类型(因此一个 415(不支持的媒体类型)状态代码是不适当的),和 请求实体的语法是正确的(因此400(错误请求) 状态码不合适),但无法处理包含的 指令。例如,如果XML 请求主体包含格式正确(即语法正确),但是语义错误的XML指令 ,则可能会出现此错误情况。
我会说,最匹配的HTTP状态代码是422,因为URI存在,请求语法是正确的,但语义错误。
看一看:http://www.codingpedia.org/ama/error-handling-in-rest-api-with-jersey/ – Fusseldieb