Re[11]: обработка ошибок
От: yenik  
Дата: 13.04.22 07:26
Оценка:
S>Фейл по вине клиента — это 4xx. Не обязательно прямо 400.
S>Если сущности ещё не существует — 404 Not Found
S>Если уже не существует — 410 Gone
Y>>Если открыть админскую панель и завести таковую сущность, то тот же самый запрос можно смело повторить и получить код 200.
S>Но если не заводить, то никаких 200 вы не получите.
S>500 означает, что запрос возможно сработает когда-то ещё, даже если в админскую панель не заходить и ничего не крутить.
S>Для сравнения — 403 Access Denied не означает, что доступ закрыт навсегда. Если пойти в админскую панель и выдать разрешение, то можно смело повторить запрос и получить 200.

Похоже, мы потеряли нить рассуждения.

Меня заинтересовало вот это сообщение.
http://rsdn.org/forum/dotnet/8252769.1
Автор: gandjustas
Дата: 08.04.22

Про 400 и 500 это был провокационный вопрос.
Ответ в стандарте — если клиент получает 400, то он не должен пытаться повторить запрос с теми же параметрами.
Это означает, что 400 нельзя кидать для ситуаций, которые могут меняться со временем и для любых rntime эксепшенов.


Однако мы говорим, что 400 можно и нужно кидать для ситуаций, которые могут меняться со временем.

https://datatracker.ietf.org/doc/html/rfc2616#section-10.4.1

10.4.1 400 Bad Request

The request could not be understood by the server due to malformed
syntax. The client SHOULD NOT repeat the request without
modifications.


Однако в нашем случае запрос был понят сервером и он синтаксически правильный. И его вполне можно повторять без изменения, пока не заработает.
Или что тогда означает malformed syntax?

Тут коллега сделал хорошее замечание.
http://rsdn.org/forum/dotnet/8255491.1
Автор: MadHuman
Дата: 12.04.22

для 400 расширилась трактовка


И действительно, смотрим https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1

6.5.1. 400 Bad Request

The 400 (Bad Request) status code indicates that the server cannot or
will not process the request due to something that is perceived to be
a client error (e.g., malformed request syntax, invalid request
message framing, or deceptive request routing).


Здесь уже не сказано, что клиенту не следует повторять запрос. И даётся примерный список причин для 400: malformed request syntax, invalid request message framing, or deceptive request routing.
Но это всё технические проблемы, а не бизнес-процесс. Однако лично я согласен, что ограничения бизнес-процесса тоже годятся.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.