Rest HTTP状态400验证与验证

Rest HTTP状态400验证与验证,rest,http,http-status-codes,Rest,Http,Http Status Codes,虽然其目的是为了澄清,但它显然给状态代码400带来了歧义。注意这一点。一个人说400现在包括逻辑、应用或验证错误,另一个人说400仍然只用于语法或验证错误 6.5.1。400错误请求 400(错误请求)状态代码表示服务器无法或 由于被认为是错误的内容,将不处理请求 客户端错误(),例如,请求语法格式错误、请求无效 消息帧或欺骗性请求路由) 我想得到一个更明确的答案。考虑两个场景,其中一个POST或PUT试图提供电子邮件地址: 在请求中找到的电子邮件验证失败(例如,它包含“hello#gmail

虽然其目的是为了澄清,但它显然给状态代码400带来了歧义。注意这一点。一个人说400现在包括逻辑、应用或验证错误,另一个人说400仍然只用于语法或验证错误

6.5.1。400错误请求
400(错误请求)状态代码表示服务器无法或 由于被认为是错误的内容,将不处理请求 客户端错误(),例如,请求语法格式错误、请求无效 消息帧或欺骗性请求路由

我想得到一个更明确的答案。考虑两个场景,其中一个POST或PUT试图提供电子邮件地址:

  • 在请求中找到的电子邮件验证失败(例如,它包含“hello#gmail.com”)发送400条回复。
  • 在请求中找到的电子邮件验证失败(例如,另一个用户已经在使用该地址)A???已发送回复。
我想跟随RFC 7231。我对6.5.1的阅读告诉我,验证错误应该收到409(或422)响应。但其他人不同意,并声称现在应该是400美元


有没有人有更多的信息来解决这个歧义?

200是一个很好的状态码,在这种情况下发送。毕竟,当您没有输入有效的邮政编码时,HTML表单是否会返回4xx

状态代码用于通用消费,而不是特定于应用程序的语义。当一个非特定的接收者(例如代理、缓存、HTTP库)可以在进来时做一些有趣的事情时,它们很有用

因此,当客户端问题(例如错误请求HTTP语法)导致错误时,将使用400。它在7231中变得更通用,因为x00状态代码是其系列中最通用的,并且在没有定义更具体的状态代码时应被视为回退


您也可以将400用于验证错误,从理论上讲,这会稍微有帮助,因为HTTP库知道不要重复该请求——但如果它是200,当然不值得太担心

有数百个“使用哪种状态代码”的问题。400是一个笼统的说法,如果你能找到一个更适合场景的说法,那么选择一个更具体的说法——如果你愿意的话。关键是要始终如一。答案是使用最适合你的东西。