Java REST的哪个4xx http状态代码
我们有一个RESTful架构,我有一个关于API异常和http状态的问题 对于以下情况,我们使用Java REST的哪个4xx http状态代码,java,spring,rest,http,http-status-codes,Java,Spring,Rest,Http,Http Status Codes,我们有一个RESTful架构,我有一个关于API异常和http状态的问题 对于以下情况,我们使用400: 值不匹配(例如,预期为100,但为99) 违反@Size、@Min、@Max、@Nullable anc等 使用422(不可处理实体)处理逻辑有问题但不是客户机错误的情况。例如,尝试将category设置为已经有一个category的产品。这在客户端是不可预测的 最后,我们使用409(冲突)处理客户错误的情况。 例如,如果他试图通过JSON发送无效的Date格式。或者注册日期远远早于当前
400
:
- 值不匹配(例如,预期为100,但为99)
- 违反@Size、@Min、@Max、@Nullable anc等
422
(不可处理实体)处理逻辑有问题但不是客户机错误的情况。例如,尝试将category设置为已经有一个category的产品。这在客户端是不可预测的
最后,我们使用409
(冲突)处理客户错误的情况。
例如,如果他试图通过JSON
发送无效的Date
格式。或者注册日期远远早于当前日期
但有一种情况可以分为几类:
我们有一个Tax
字段,它是整数
若客户端发送分数税
,则应抛出异常
从一方面看,这显然是400
,客户应该看到“税收不能是零碎的”
但是,从另一方面来说,这是一个客户端的程序员错误,因为他试图发送双精度/浮点值,而不是整数/长(即,他发送另一种类型,类似于pass Long而不是String),应该抛出409
我应该选择什么:400
或409
用于数字
案例中的类型不匹配
?
如果400
,为什么我要对数字类型进行分析,而对Date/String
类型不匹配的情况抛出409
我更喜欢有明确逻辑的答案,而不是“我认为”。这不是一个讨论。观点:由于类型更为基本,我会抛出409个我同意基于观点的问题评论,但我也会将其抛出:
我不明白您为什么要为这些案例中的任何一个添加
409
。
以下是维基百科对409的评论:
指示由于冲突而无法处理请求
在请求中,例如在多个
更新
我将使用400
作为数字类型以及Date/String
大小写
但这是一个个人风格的问题,只要您在整个API中保持一致,两种状态代码都是可能的。老实说,对于您的用例,我更喜欢状态代码
400
或422
,因为提供的实体由于其内容而无法处理。这可能是结构性的(错误的类型、缺少必需的字段等)或数据验证(使用regexp的格式错误、不允许的值、重复的值等)
状态代码409
应该用于乐观锁定,如链接中所述:
10.4.10 409冲突
由于与资源的当前状态冲突,无法完成请求。只有在预期用户可能能够解决冲突并重新提交请求的情况下,才允许使用此代码。响应主体应包含足够的信息,以便用户识别冲突的来源。理想情况下,响应实体将包括足够的信息,供用户或用户代理修复问题;然而,这可能是不可能的,也不是必须的
在响应PUT请求时最有可能发生冲突。例如,如果正在使用版本控制,并且正在放置的实体包含对资源的更改,这些更改与先前(第三方)请求所做的更改相冲突,则服务器可能会使用409响应来指示它无法完成请求。在这种情况下,响应实体可能会以响应内容类型定义的格式包含两个版本之间差异的列表
希望它能帮助你,
Thierry我闻到一个基于意见的问题,所以无论你选择做什么,都要保持一致。我的观点是,在使用http响应时,要坚持基于标准的定义。亲爱的亲密选民:这个问题不是基于意见的。HTTP响应被充分地描述以产生一个明确的答案。是的,我持相同的观点。这更像是程序员的思考方式。右键单击,查看图像,您应该会得到原始文件。或者,它在这里:这个文件是您自己的产品还是某种“标准”?如果是后者,您是从哪里获得的?@user2138356如果我应用了该图像,我最终会出现在'409'->您放入更新中,它与服务器状态冲突。或者如果最终是更新失败(您的处理无法预料)然后它的“500”表示“出人意料的出错”。替代图形:相同的结果,就我所能看到的内容而言也是相同的。对于像我这样想知道谁在这个答案中制作了digram的人来说:就我所能找到的而言,是谁在这个github项目中有更新版本的digram: