Size: a a a

var chat = new Chat();

2020 December 05

V

VD in var chat = new Chat();
Etki
Поддерживаю обоих, слать код в теле ответа говно, слать код хттп-статусом тоже говно, потому что более уебанского протокола не существует (в качестве разминки для мозгов можете попробовать посчитать какое количество из 4хх реально являются ошибками).

Лично я за то чтобы использовать хттп максимум как транспорт, хоть он и выше уровнем.
Еее здравый смысл
источник

OZ

Oleksii Zaichenko in var chat = new Chat();
VD
Это делается для того чтобы разделять ошибки инфраструктуры или транспорта от ошибок бизнес логики
То есть тебе удобнее обслуживать ошибки инфраструктуры отдельно от ошибок бизнес логики? В том числе и валидации?
источник

OZ

Oleksii Zaichenko in var chat = new Chat();
Или валидацию параметров ты рассматриваешь отдельно?
источник

OZ

Oleksii Zaichenko in var chat = new Chat();
VD
Чистого реста там конечно нет
Но, внезапно, его нигде нет
В продакшене я ни разу не видел не кривую псевдо RPC over JSON, а именно рест
Потому что зачастую проще не делать rest а делать rpc с json. Я и сам за свою практику не видел в проде сервисов, которые можно назвать restful (не считая файло хранилищ).
источник

V

VD in var chat = new Chat();
Oleksii Zaichenko
Или валидацию параметров ты рассматриваешь отдельно?
Отдельно конечно
Потому что этот кейс покрывается статус кодом и является ошибкой контракта а не приложения
источник

V

VD in var chat = new Chat();
Oleksii Zaichenko
Потому что зачастую проще не делать rest а делать rpc с json. Я и сам за свою практику не видел в проде сервисов, которые можно назвать restful (не считая файло хранилищ).
Потому что рест помимо файлопомоек и cms нигде нормально не приживается, ибо он слишком ограничивает подход
источник

OZ

Oleksii Zaichenko in var chat = new Chat();
VD
Отдельно конечно
Потому что этот кейс покрывается статус кодом и является ошибкой контракта а не приложения
Ну ошибки БЛ так же вполне можно покрыть отдельным статус кодом.
источник

OZ

Oleksii Zaichenko in var chat = new Chat();
Статусы 2хх говорят о том, что запрос был успешно обработан. Если произошла ошибка БЛ, то это уже не так
источник

E

Etki in var chat = new Chat();
Oleksii Zaichenko
То есть тебе удобнее обслуживать ошибки инфраструктуры отдельно от ошибок бизнес логики? В том числе и валидации?
ошибки инфраструктуры - исключения
Ошибки бизнес-логики - классические юзерлендовые объекты
источник

OZ

Oleksii Zaichenko in var chat = new Chat();
Etki
ошибки инфраструктуры - исключения
Ошибки бизнес-логики - классические юзерлендовые объекты
У себя в приложении - как вариант. Это не отменяет того, что я написал выше в своём предыдущем сообщении.
источник

V

VD in var chat = new Chat();
Oleksii Zaichenko
Статусы 2хх говорят о том, что запрос был успешно обработан. Если произошла ошибка БЛ, то это уже не так
Схренали
Запрос обработан как раз таки успешно
Но только запрос, как часть транспортного уровня
А вот результат вызова rpc это уже другая история
источник

V

VD in var chat = new Chat();
И смешивать их моветон
источник

V

VD in var chat = new Chat();
Потому что тогда хттп коды начинают делать то, для чего они не предназначены - описывать контракт именно твоего домена
источник

V

VD in var chat = new Chat();
А учитывая какие статус коды убогие и их количество
источник

V

VD in var chat = new Chat();
Думаю вывод сам собой приходит
источник

V

VD in var chat = new Chat();
Приведу наглядный пример почему ошибкам БЛ не место в хттп кодах:

Сегодня у вас есть какое-то АПИ, оно вас устраивает и оно поверх HTTP (а тобишь опять таки тот же RPC over JSON) и вы отдаёте ошибки БЛ статус кодами

Ваше апи популярно и у него много клиентов

Наступает момент когда нужно переехать на что-то другое, gRPC там или SOAP(упаси Боже)
И вот начинается настоящая катастрофа

У вас есть контракт описывающий типы сообщений по каждой точке, и этот контракт завязан на статус коды в случае ошибок

И тут при переезде на тот же gRPC вы понимаете что ошибки БЛ больше нельзя выразить привычным способом нормально

И полюбому начинаете городить свои варианты IsSuccess внутри сообщений или его аналоги через перечисление

Поздравляем: теперь у вас 2 разных АПИ с непохожим контрактом
источник

V

VD in var chat = new Chat();
Хотя можно было заранее избежать такого
источник

V

VD in var chat = new Chat();
И это я ещё молчу про всякие там балансеры, прокси и клаудфлеры которые могут делать с вашими статус кодами и хедерами чо хотят
источник

V

VD in var chat = new Chat();
И вы их не можете контролировать
источник

SK

Sergiy Korzh in var chat = new Chat();
👍
источник