#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 при сбое проверки. Поэтому лучше сгруппируйте и классифицируйте исключения проверки и исключения бизнес-логики.