Ошибки проверки WebAPI и код ответа

#rest #asp.net-core #validation #api-design #fluentvalidation

#остальное #asp.сетевое ядро #утверждение #api-дизайн #флуентвалификация

Вопрос:

Я застрял в дилемме и хотел услышать ваше мнение.

При соблюдении следующих условий:

  • Все ошибки проверки должны быть возвращены в одном ответе (ввод данных пользователем и проверка бизнес-логики).
  • Проверка ввода пользователем (например, фамилия не должна быть пустой), которая завершилась неудачно, должна вернуть 400 BadRequest
  • Проверка бизнес-логики, для которой требуется уникальное свойство (например, уникальный номер телефона), которая завершается неудачно, должна вернуть 409 Conflict

Таким образом, следующие ошибки соответствуют 400 BadRequest

 "errors": {  "LastName": [  "Last Name field is required" // User Input Validation =gt; BadRequest  ] }  

И следующее отвечает 409 Conflict

 "errors" : {  "PhoneNumber": [  "Phone Number is already in use" // Business Logic Validation (Uniqueness) =gt; Conflict  ] }  

Каким должен быть код ответа при наличии перекрытия? Например:

 "errors": {  "LastName": [  "Last Name field is required" // User Input Validation =gt; BadRequest  ],  "PhoneNumber": [  "Phone Number is already in use" // Business Logic Validation (Uniqueness) =gt; Conflict  ]  }  

Существует ли правило приоритета? Должно ли вышеуказанное привести к конфликту или плохому запросу?

Для Контекста

Я использую Asp.Net Ядро с флуоресцентной валидацией. Я знаю, что на самом деле это не так уж и важно, но это всего лишь мысленный эксперимент, а не для законного Api.

Комментарии:

1. оба установили их как ошибку 400, затем проблема была решена.

Ответ №1:

Приоритет ошибок полностью зависит от вас. Всегда рекомендуется выходить рано, когда возникает ошибка. Обычно мы возвращаем код ошибки 400 при сбое проверки. Поэтому лучше сгруппируйте и классифицируйте исключения проверки и исключения бизнес-логики.