我陷入了进退两难的境地,想听听你的意见。
给定以下条件:
- 所有验证错误必须在一个响应中返回(用户输入和业务逻辑验证(
- 失败的用户输入验证(例如,姓氏不得为空(应返回
400 BadRequest
- 需要唯一属性(例如,唯一电话号码(但失败的业务逻辑验证应返回
409 Conflict
因此以下错误对应于400 BadRequest
"errors": {
"LastName": [
"Last Name field is required" // User Input Validation => BadRequest
]
}
下面用409 Conflict
进行响应
"errors" : {
"PhoneNumber": [
"Phone Number is already in use" // Business Logic Validation (Uniqueness) => Conflict
]
}
当存在重叠时,响应代码应该是什么?例如:
"errors": {
"LastName": [
"Last Name field is required" // User Input Validation => BadRequest
],
"PhoneNumber": [
"Phone Number is already in use" // Business Logic Validation (Uniqueness) => Conflict
]
}
有优先权的规则吗?以上应该返回Conflict还是BadRequest?
对于上下文
我使用的是带有FluentValidation的Asp.Net Core。我知道这并不是什么大不了的事,但这只是一个思想实验,而不是一个合法的Api。
错误优先级完全由您决定。当出现错误时,提前退出总是一种很好的做法。通常,当验证失败时,我们会返回错误代码400。因此,更好地对验证异常和业务逻辑异常进行分组和分类。