我正在构建RESTful API,遇到了一种情况。在用户注册期间,如果电子邮件已经存在,那么在422
和409
之间,哪个HTTP响应代码有意义?
我浏览过类似的one,并且接受的答案来自2012年。答案仍然有效吗?例子会很有帮助。
答案 0 :(得分:2)
一旦409
和422
都适用于这种情况,您可能找不到这个问题的绝对答案(我会选择{{3} })。
对于任何一个,您必须确保将描述问题的有效负载发送回客户端。
409
(冲突)状态码表示请求无法 由于与目标的当前状态冲突而完成 资源。此代码用于用户可能会 能够解决冲突并重新提交请求。服务器 应该生成一个有效载荷,该有效载荷应为用户提供足够的信息 识别冲突的根源。 [...]
422
(不可处理实体)状态代码表示服务器 了解请求实体的内容类型(因此415
(不受支持的媒体类型)状态码不正确),并且 请求实体的语法正确(因此400
(错误请求) 状态代码不正确),但无法处理其中的内容 说明。例如对于如果XML可能会出现此错误情况 请求正文包含格式正确(即语法正确)的内容,但 语义错误的XML指令。
答案 1 :(得分:0)
我认为class Product < ActiveRecord::Base
scope :closest_by_price, ->(price) {
quoted_price = connection.quote(price, columns_hash["price"])
order("abs(products.price - #{quoted_price})")
}
end
Product.closest_by_price(50.0)
在此示例中最合适,因为请求与已经存在的注册冲突。
例如,如果服务不能接受基于.de域的电子邮件地址; 409
似乎更可取。此示例也将不符合422
的条件,因为.de域是有效的语法。