我们有一个restful架构,我有一个关于api的异常和http状态的问题。
我们使用400
来处理以下情况:
值不匹配(例如,应为100,但为99)
违反@size,@min,@max,@nullable anc等
在逻辑出错的情况下使用422
(不可处理的实体),但这不是客户机错误。例如,尝试将“类别”设置为“已具有类别的产品”。这在客户端是不可预测的。
最后,当它是客户的错误时,我们使用409
(冲突)。
例如,如果他试图通过Date
发送无效的JSON
格式。或者注册日期比当前日期早得多。
但有一种情况可分为以下几类:
我们有一个Tax
域,它是整数。
如果客户端发送分数Tax
则应引发异常。
从一个侧面看,这显然是400
和客户应看到'税不能是部分'。
但是,从另一方面来说-这是客户端的程序员错误,因为他试图发送double/float而不是integer/long(即他发送另一种类型,它类似于pass long而不是string),应该抛出409。
我应该选择什么:400
或409
对于TypeMismatch
案例中的Numbers
?
如果400
,我为什么要为数型而为409
病例而吐出Date/String
?
我更喜欢有明确逻辑的答案,而不是“我想”。这不是讨论。
最佳答案
我同意基于意见的问题评论,但我也会把这个抛在一边: