Size: a a a

Saint P Ruby Community

2020 September 21

m

max in Saint P Ruby Community
так и я о том же, что не стоит путать тёплое с мягким
http status code - для ошибок уровня http транспорта
не стоит туда пихать ошибки уровня приложения
источник

KK

Kirill Kaiumov in Saint P Ruby Community
max
так и я о том же, что не стоит путать тёплое с мягким
http status code - для ошибок уровня http транспорта
не стоит туда пихать ошибки уровня приложения
если логика приложения такая, что в ответ на запрос нужно редиректнуть, то тоже отвечать 200, а не 301?
источник

KK

Kirill Kaiumov in Saint P Ruby Community
или речь только о 4хх и 5хх?
источник

CM

Cucumba Morozov in Saint P Ruby Community
Kirill Kaiumov
если логика приложения такая, что в ответ на запрос нужно редиректнуть, то тоже отвечать 200, а не 301?
кстати, если браузер должен редиректнуть, то да, стоит 200 ответить
источник

m

max in Saint P Ruby Community
тут вопрос кто выполняет редирект?
источник

CM

Cucumba Morozov in Saint P Ruby Community
т.к. по хттп редиректам, библиотеки автоматом засылают GET запрос туда, куда указано в Location заголовке

т.е. эффект может быть немного не тот, что разраб ожидает
источник

KK

Kirill Kaiumov in Saint P Ruby Community
Cucumba Morozov
т.к. по хттп редиректам, библиотеки автоматом засылают GET запрос туда, куда указано в Location заголовке

т.е. эффект может быть немного не тот, что разраб ожидает
👍
источник

A

Anton in Saint P Ruby Community
еще есть вариант когда отдаешь какому-то сервису данные по АПИ, например в google news. и если новость удалилась, то всё же стоит вернуть 404, нежели 200.
Я обычно возвращаю для ошибок 4xx + описание
источник

RC

Randy Castillo in Saint P Ruby Community
Хай. Как дела?
источник

DS

Dmitriy Strukov in Saint P Ruby Community
Совпадение :)?
источник

AD

Anton Davydov in Saint P Ruby Community
Не думаю
источник
2020 September 22

VK

Vladimir Kalinkin in Saint P Ruby Community
max
моя логика проста как палка - если веб сервер получил ответ от приложения, то ответить он должен 200, потому что это код ответа уровня http транспорта
а то что там была ошибка на уровне приложения транспорт волновать не должно

в конце концов - ответ 301 Redirect никто руками на уровне приложение не обрабатывает, а считает что это должен делать транспорт
В том-то и дело, что транспорт. Только вот функции веб-сервера в случае апи может выполнять и само веб-приложение. Поверх апи-сервиса может быть сколько угодно абстракций, а может быть  нисколько. Клиент ничего об этом не знает, но хочет иметь ответ соответвующий стандарту.  Клиент работает с абстрактным единым веб-сервером. Когда что-то работает не так и ты получаешь 200, то выглядит как-то неожиданно. 301 не выглядит ни исключением, ни проблемой, он соответствующе обрабатывается клиентским фреймворком например.
источник

m

max in Saint P Ruby Community
SRP и ISP никто не отменял.
Хотите валить все в кучу - протокол, транспорт, интерфейс - ваше право, заплатите втридорога за поддержку и траблшутинг.
В вашем примере нарушен ISP, когда апи выполняет еще и роль веб сервера.
Клиент не должен работать с веб сервером, клиент должен работать с апи. С веб сервером должна работать подсистема транспорта этого апи и пользователь может о ней ничего не знать.

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

m

max in Saint P Ruby Community
По мне так эта одна из ключевых проблем restfull api. Вспомнить хотя бы рельсовые костыли в виде _method=put/delete/post
источник

m

max in Saint P Ruby Community
А самое забавное тут то, что "делаем под спецификацию http", а на деле используют http/2 делая вид что это одно и то же. Ведь если трансляцию из одного в другое делает веб сервер, то ведь это "не считается"
источник

VK

Vladimir Kalinkin in Saint P Ruby Community
max
SRP и ISP никто не отменял.
Хотите валить все в кучу - протокол, транспорт, интерфейс - ваше право, заплатите втридорога за поддержку и траблшутинг.
В вашем примере нарушен ISP, когда апи выполняет еще и роль веб сервера.
Клиент не должен работать с веб сервером, клиент должен работать с апи. С веб сервером должна работать подсистема транспорта этого апи и пользователь может о ней ничего не знать.

Например, следуя вашей логике, если в результате вызова апи пользователь должен быть перенаправлен на другую страницу, то ответ должен быть 301 Redirect, но в реальности такой ответ перенаправит вызов апи и вам понадобится писать дополнительный код что бы этого не происходило и корректно это обрабатывать.
И даже в этом случае для вас становятся неразличимы ситуации когда надо перенаправить пользователя на новую страницу, а когда сам вызов апи, потому что оно переехало
ой-ой, SRP-ISP, мне кажется это чуть-чуть про другое, не? 😂
источник

m

max in Saint P Ruby Community
Нет. Мы же про архитектуру приложения/апи говорим
источник

VK

Vladimir Kalinkin in Saint P Ruby Community
max
Нет. Мы же про архитектуру приложения/апи говорим
окей
источник

VK

Vladimir Kalinkin in Saint P Ruby Community
а ты случаем не троллишь? не, ну реально мы тут с пацанами под пиво ржём сидим, как завернуло тут и что-то из OSI, и SRP, ISP, очевидно и весь SOLID здесь. уважаемые люди интересуются - чё куришь, брат? 🤔
источник

m

max in Saint P Ruby Community
Обсуждение началось с проектирования интерфейса апи. Я поделился опытом и привёл аргументацию почему считаю один подход лучше другого. Какие проблемы встречаются и какие принципы нарушаются при предложенных решениях.

Как я понял, у уважаемых людей конструктивных аргументов нет. Поэтому предлагаю продолжить дискуссию когда они появятся
источник