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.
Но это всё технические проблемы, а не бизнес-процесс. Однако лично я согласен, что ограничения бизнес-процесса тоже годятся.