Http REST—发送部分无效的请求时要抛出什么错误
我正在开发一个RESTAPI。为了简化我的问题,我有一个API,允许人们创建一个新的博客帖子 Blogposts可以存在于类别中,类别由类别id指定。如果用户提供的类别id不存在,哪个HTTP错误代码最合适Http REST—发送部分无效的请求时要抛出什么错误,http,rest,error-handling,Http,Rest,Error Handling,我正在开发一个RESTAPI。为了简化我的问题,我有一个API,允许人们创建一个新的博客帖子 Blogposts可以存在于类别中,类别由类别id指定。如果用户提供的类别id不存在,哪个HTTP错误代码最合适 404找不到似乎不好,所以我现在用400个不好的请求。有一个更好的吗? < P>我认为没有找到404个是最合适的回应-考虑到客户已经尝试访问一个不存在的类别,所以完美的答案是“我找不到那个类别!” < P>我假设你对你的博客帖子资源中的一个POST或POST请求做出响应。 我会选择400,因
404找不到似乎不好,所以我现在用400个不好的请求。有一个更好的吗? < P>我认为没有找到404个是最合适的回应-考虑到客户已经尝试访问一个不存在的类别,所以完美的答案是“我找不到那个类别!” < P>我假设你对你的博客帖子资源中的一个POST或POST请求做出响应。 我会选择400,因为找到了您使用URI访问的资源。如果请求内容正确,则可以修改博客文章 因为这是错误的已发送查询的内容,而不是资源的实际URI,所以我坚持使用400错误
但是,如果您将博客文章添加到类别中,您可以将其放入或发布到类别中,然后返回404 Not found。404有一个非常具体且常用的含义,即找不到URL。此外,一些浏览器会使用自己的404错误页面,这会让事情更加混乱。 看 我建议“406不可接受” 根据请求中发送的accept标头,请求标识的资源只能生成具有不可接受内容特征的响应实体。” 不过,400也不错。哪一项违反了特定于应用程序的规则呢?在这种情况下,博客文章的类别ID必须已经存在。当您返回409冲突回复时,请确定用户可以做些什么来纠正这种情况,以便他们可以重试POST/PUT 我同意,在可用的已定义状态代码中,400是最好的。客户机在提交请求时应该知道类别id是否有效,从而向服务器提供错误的请求内容 关于提供的其他一些答复:
- 404未找到-这不是要使用的正确状态,因为您发送请求的资源实际上已找到-它只是提供的资源中未找到的引用资源
- 406不可接受-此状态与Evert commented一样,与Accept标头一起使用;见第10.4.7节: 请求标识的资源只能生成 具有内容特征的响应实体不可接受 根据请求中发送的accept标头
- 409冲突-此状态用于资源的冲突状态,通常是由于其他通道或线程对资源进行的修改。(第10.4.10节)给出了一个示例: …如果正在使用版本控制并放置实体 包括对资源的更改,这些更改与 在以前的(第三方)请求中,服务器可能会使用409响应 表示它无法完成请求
因此,您可以定义自己的自定义“430未找到引用的资源”或类似的内容。遵守HTTP的客户端如果不知道该状态,则应将其视为400,但如果客户端专门针对API进行编码,则应能够将其作为430进行处理,并适当地使用它。这不是对该问题的回答,但如果您的API用于写博客,则最好实现MetaWebLog API()或者Atom发布协议(),所有常用的博客工具都可以发布到它。我自己也肯定会使用Atom,我的服务实际上与博客无关。我只是觉得这是一个很好的例子,这是一个不好的请求,除非你的url类似于
domain.com/category name或id/posts
,并且category name或id
不存在,这将使404.406直接与Accept-*:headers的使用联系在一起。