Email or username:

Password:

Forgot your password?
Top-level
Umnik

@rayslava @skobkin правильно возвращать то, что уже возвращаете, лул.

13 comments
Alexey Skobkin

@umnik @rayslava
То есть если это новая система, то правильно ничего не возвращать вообще? :philosoraptor:

Umnik

@skobkin @rayslava в новой - договаривайтесь. Сам я за стандарты, просто потому что новый член команды сразу будет понимать, что происходит. Но верю, что возможны ситуации, когда можно отвечать 200 на всё. От "надо СЕЙЧАС" до "чтобы задолбать скрипт кидди".

Если делаешь для внешнего пользования, то только стандарт, разумеется.

Alexey Skobkin

@umnik
@rayslava пишет не про команду, а про то, как надо делать "вообще". Ну, то есть в индустрии.

То, что в какой-то конкретной команде ты можешь договориться хоть о том, что на успешный запрос будешь возвращать 400 и все будут следовать - это и так понятно.

> Если делаешь для внешнего пользования, то только стандарт, разумеется

Так вот а что стандарт? Вопрос-то в этом.

Ты можешь воспринимать HTTP как трубу, а можешь - как протокол своего приложения. И тогда подходы к кодам ошибок могут быть разные.

Если это труба - тогда 200 можно ответить если ты достучался до бизнес-логики и она что-то вернула - неважно, что.
Если это протокол твоего приложения, то тогда если бизнес-логика возвращает ошибку, то её надо отражать в коде ответа.

@umnik
@rayslava пишет не про команду, а про то, как надо делать "вообще". Ну, то есть в индустрии.

То, что в какой-то конкретной команде ты можешь договориться хоть о том, что на успешный запрос будешь возвращать 400 и все будут следовать - это и так понятно.

> Если делаешь для внешнего пользования, то только стандарт, разумеется

Umnik

@skobkin хттп - это протокол. Вот тебе сотые, вот пятисотые. Воспринимаю только так и завожу баги в своих проектах, если иначе. @rayslava

Roman

@umnik @skobkin @rayslava а что, не нравится когда вернулось 200 и в ответе json с описанием ошибки? :)

Umnik

@3draven нет, не нравится. Но прям такого у меня никогда и не было. А вот отдавать 500 вместо 400 - это прям было @skobkin @rayslava

Alexey Skobkin

@umnik @3draven @rayslava
Это не "отдавать 500 вместо 400", а "ебланы не смогли в валидацию и сломались от неожиданного значения" 😁

У меня такое тоже было, лол.

Umnik

@skobkin это ты причину описываешь. Мы все её понимаем. Но для заведения дефекта были условия, что на плохой запрос должен быть ответ "плохой запрос". То есть с точки зрения "результат проверки" это именно 500 вместо 400. А под капотом да, типичная проблема, когда просто передали без проверки, а БД ругнулась на вставке, например. Просто для заведения баги это не важно [в той структуре организации было] @3draven @rayslava

Alexey Skobkin

@umnik @rayslava
Воспринимаешь только как?
Я не шучу, я размышляю в двух парадигмах сразу. Если оторваться от привычной, то вопрос вполне имеет смысл.

Umnik

@skobkin только как протокол. То есть вот методы, вот статус коды. Не требую прям всё разнообразие поддержать, но нулевые отдавать только по делу. @rayslava

Alexey Skobkin

@umnik @rayslava
Ну так методы и коды - они про доступ к ресурсам.
А какой уровень абстракции является ресурсом?

Что если для тебя ресурсом является сам эндпоинт, а не то, что он может тебе отдать после какой-то работы?

Плюс есть ведь дискуссии в стиле "надо ли возвращать 404 если ты обратился по id, которого нет", ведь на уровне протокола HTTP (без учета тела) это будет неотличимо от того, что ты просто пришел мимо эндпоинта ☝️
Но это противоречит идее "маппим все как можем на коды HTTP".

На самом деле как человек, который регулярно пишет клиенты к чужим API, я могу сказать, что у обоих подходов есть свои плюсы.

P.S. Мы тут не обязательно говорим про Rest. В его рамках-то как раз бизнес-сущности подразумеваются HTTP-ресурсами.

@umnik @rayslava
Ну так методы и коды - они про доступ к ресурсам.
А какой уровень абстракции является ресурсом?

Что если для тебя ресурсом является сам эндпоинт, а не то, что он может тебе отдать после какой-то работы?

Плюс есть ведь дискуссии в стиле "надо ли возвращать 404 если ты обратился по id, которого нет", ведь на уровне протокола HTTP (без учета тела) это будет неотличимо от того, что ты просто пришел мимо эндпоинта ☝️
Но это противоречит идее "маппим все как можем на коды HTTP".

Umnik

@skobkin
Каждый участник в цепочке будет эндпоинтом для меня. Каждый промежуточный узел путешествия запроса по http должен подчиняться одним и тем же правилам.

404 - это статус код. Уточнения - в теле. Не надо его не учитывать. И я буду настаивать на таком поведении до тех пор, пока не получу объяснение, почему так нельзя. Кроме "ну а что такого?"
@rayslava

Alexey Skobkin

@umnik @rayslava
А никто и не говорит, что так нельзя.
Другое дело что так "можно", а не "нужно".

То есть "должен" мне тут не очень понятно.

В целом когда Слава меня спрашивал, я сказал, что это скорее считается правилом хорошего тона. В среднем по больнице.

Однако я вполне могу понять другую позицию. Она не лишена смысла.

Go Up