【问题标题】:WebAPI Validation errors and Response codeWebAPI 验证错误和响应代码
【发布时间】:2022-01-05 17:15:18
【问题描述】:

我进退两难,想听听你的意见。

鉴于以下条件:

  • 必须在一个响应中返回所有验证错误(用户输入和业务逻辑验证)
  • 失败的用户输入验证(例如姓氏不能为空)应返回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错误,问题就解决了。

标签: rest asp.net-core validation api-design fluentvalidation


【解决方案1】:

错误优先级完全由您决定。发生错误时尽早退出总是一个好习惯。通常,当验证失败时,我们会返回错误代码 400。所以最好对验证异常和业务逻辑异常进行分组和分类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    相关资源
    最近更新 更多