Size: a a a

Saint P Ruby Community

2020 September 20

M

Max in Saint P Ruby Community
Спасибо за ссылочку. Очень интересно. Присоединюсь и буду благодарен если у кого-то есть еще что почитать по system design
источник

EK

Eugene Kozlov in Saint P Ruby Community
Я думаю лучше здесь спросить https://t.me/FaangInterview так как в фаанге систем дизайн идёт как отдельный раунд интервью
источник

EK

Eugene Kozlov in Saint P Ruby Community
Max
Спасибо за ссылочку. Очень интересно. Присоединюсь и буду благодарен если у кого-то есть еще что почитать по system design
https://github.com/abstractart/shorts/blob/master/engineering/system-design.md Я здесь собираю материалы которые нахожу в интернете, возможно что-то пригодится
источник

M

Max in Saint P Ruby Community
Класс! Спасибо
источник

DS

Dmitriy Strukov in Saint P Ruby Community
Eugene Kozlov
Я думаю лучше здесь спросить https://t.me/FaangInterview так как в фаанге систем дизайн идёт как отдельный раунд интервью
Спасибо за ссылку
источник
2020 September 21

KK

Kirill Kaiumov in Saint P Ruby Community
источник

AR

Anna Razumova in Saint P Ruby Community
Привет всем! Вопрос такой - как православно вертать всякие ошибки в рест апи. Писать заголовок 200 и оформлять ошибку как json (описание всякое там, поля опять же) или возвращать http код типа 403?
источник

v

vveare138 in Saint P Ruby Community
зависит от типа ошибки
источник

AR

Anna Razumova in Saint P Ruby Community
как вы делаете?
источник

v

vveare138 in Saint P Ruby Community
если это клиентская ошибка - 4** статусы
источник

v

vveare138 in Saint P Ruby Community
серверные ошибки - 5**
источник

v

vveare138 in Saint P Ruby Community
источник

v

vveare138 in Saint P Ruby Community
и body ответа (описание ошибки с кодом ошибки, таргетом и сообщением)
источник

m

max in Saint P Ruby Community
в классическом варианте возвращают заголовок http status code 4xx, 5xx
но без body это быстро становится неудобным, тк абсолютно неясно что произошло - может просто вебсервер прилег

поэтому лучше передавать json в body с детальным описанием ошибки

и по мне, так лучше возвращать 200 с телом result: {}, error: { code: 42, desc: ... } (по своему вкусу)
и чекать что error не пустой
и тогда статусы отличные от 200 сигнализируют, что что-то не так с веб-сервером, а не с приложением
что бы "почувствовать разницу" попробуйте написать обработчики then/catch для `$.ajax('/api/order/123')`и различить в них когда ошибка от приложухи, а когда от вебсервера
источник

AR

Anna Razumova in Saint P Ruby Community
max
в классическом варианте возвращают заголовок http status code 4xx, 5xx
но без body это быстро становится неудобным, тк абсолютно неясно что произошло - может просто вебсервер прилег

поэтому лучше передавать json в body с детальным описанием ошибки

и по мне, так лучше возвращать 200 с телом result: {}, error: { code: 42, desc: ... } (по своему вкусу)
и чекать что error не пустой
и тогда статусы отличные от 200 сигнализируют, что что-то не так с веб-сервером, а не с приложением
что бы "почувствовать разницу" попробуйте написать обработчики then/catch для `$.ajax('/api/order/123')`и различить в них когда ошибка от приложухи, а когда от вебсервера
вот да, "статусы отличные от 200 сигнализируют, что что-то не так с веб-сервером, а не с приложением" смущают
источник

YR

Yaroslav Rodnin in Saint P Ruby Community
422 отличный статус для ошибок
источник

AR

Anna Razumova in Saint P Ruby Community
а вообще кстати сваггер не позволяет описывать несколько ответов со статусом 200
источник

v

vveare138 in Saint P Ruby Community
Yaroslav Rodnin
422 отличный статус для ошибок
++
источник

m

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

в конце концов - ответ 301 Redirect никто руками на уровне приложение не обрабатывает, а считает что это должен делать транспорт
источник

m

max in Saint P Ruby Community
Anna Razumova
а вообще кстати сваггер не позволяет описывать несколько ответов со статусом 200
поэтому интерфейс должен быть универсальным
result: { ... },
error: { ... },

и желательно чтобы в error тоже было универсально code:, desc:
а вот содержимое result может меняться в зависимости от эндпоинта
источник