170 похожих чатов

Тогда, это получается отделение транспортных ошибок от бизнесовых так как при

едином транспорте такое - оверхед дикий

но, как часто надо такое закладывать?

вот хороший вопрос

31 ответов

17 просмотров

1. Почему дикий оверхед(нужны бенчмарки)? 2. Как вы отличаете что 403 прилетело с сервера, а не с коробки посередине?

Artur-Karapetov Автор вопроса

1. по человеко-часам оверхед и без бенчей виден 2. по ошибке внутри

Artur Karapetov
1. по человеко-часам оверхед и без бенчей виден 2....

Чтобы разобрать ошибку внутри, надо всё равно смотреть payload. Если мы смотрим payload, то какая разница тогда на http-статусы?

Artur Karapetov
1. по человеко-часам оверхед и без бенчей виден 2....

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

Геннадий Ковалёв
А чего за коробка посередине?

Например, корп. фаерволл или dlp-система.

Геннадий Ковалёв
А чего за коробка посередине?

Т.е. это типичная история в каком-нибудь банке: на все клиентские машины раскатывается свой CA, а все https-ресурсы отствечивают сертификатом подписанным этим CA. Классический mitm + разбор что там в http у вас бегает. Всё это ради того чтобы сотрудник либо не слил какие-то важные данные, либо не притащил малварь на свою машину.

Roman Timofeev
Например, корп. фаерволл или dlp-система.

Ну если отдали 403, надо прекратить запросы и сообщить куда надо. Какая разница кто её отдал. Ну а если нужны детали, то есть тело. Есть content-type application/json, есть кастомные заголовки в конце концов. Но код 403 извольте не трогать.

Artur-Karapetov Автор вопроса
Daniel Podolsky
нет там никакого оверхеда. это все и так, и эдак н...

по поводу оверхеда не согласен точно. в остальном да, зависит от системы, отсюда и мой вопрос (риторический): как часто и какие признаки, что надо закладывать подобное поведение.

Artur Karapetov
по поводу оверхеда не согласен точно. в остальном...

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

Artur-Karapetov Автор вопроса
Daniel Podolsky
мне хватило в свое время одного аргумента, чтобы р...

почему не перекладываете на клиентов эту задачу? разные системы требуют разного поведения на разные ошибки

Artur Karapetov
почему не перекладываете на клиентов эту задачу? ...

а как клиент поймет, что именно означает 400, которую он получил?

Artur-Karapetov Автор вопроса

код ошибок

Artur Karapetov
код ошибок

код каких ошибок?

Roman Timofeev
1. Почему дикий оверхед(нужны бенчмарки)? 2. Как ...

2. например, контракт ответа может включать статус-код. коробка - левый пейлоад, ваш сервис - в пейлоаде status: 403 или в целом по типам ошибок(если ваша "коробка" конфигается)

Artur-Karapetov Автор вопроса

чтобы по пути никто(апи гейтвей, реверс-прокси) его не поменял на себе угодный

Daniel Podolsky
мне хватило в свое время одного аргумента, чтобы р...

А в чем проблема? Если сервер уже текст должен отдать, то клиент в запросе указывает нужный язык каким-нибудь Accept-Language. Сервер отвечает с кодом 400, устанавливает, например. Content-Type в application/json, и теле выплёвывает нужный json.

твой братишка
чтобы по пути никто(апи гейтвей, реверс-прокси) е...

А почему он (не) поменяет? Проблема ведь в чём: мы одну и ту же информацию пытаемся передать и через статусы транспортного протокола, и через payload. И от одного из этих способов сигнализации можно избавиться.

Геннадий Ковалёв
А в чем проблема? Если сервер уже текст должен отд...

мы реально хотим задачу локализации мобильных приложений решать на беке? мы здоровы ментально, нет?

Геннадий Ковалёв
А в чем проблема? Если сервер уже текст должен отд...

А если клиент пришёл с Accept: application/xml - мы ему xml должны выплюнуть?

Daniel Podolsky
мы реально хотим задачу локализации мобильных прил...

Я не понял, где надо её решать, поэтому и написал если. Если на клиенте, то всё тоже самое. Код http всё равно 400, тот же, например, json, а в теле самом Json внутренний код ошибки и фраза по-умолчанию. Клиент сам должен разрулить это.

Daniel Podolsky
не, тут точно “bad request” 🙂

Если серьёзно, я видел одно api, в которое можно сделать запрос с Content-Type: application/json и Accept: application/xml и сервис реально прожует json и выплюнет xml

Roman Timofeev
Если серьёзно, я видел одно api, в которое можно с...

swagger позволяет такое сконфигурить, и даже разумно выовет хендлеры

Daniel Podolsky
swagger позволяет такое сконфигурить, и даже разум...

Осталось найти кодген который это умеет

Artur Karapetov
по поводу оверхеда не согласен точно. в остальном...

А с чем связан оверхед? Вот у нас есть api, которое всегда отвечает 200, а в теле всегда есть поле status. Если ошибок нет, там 0. Если ошибка есть, то ещё поля message(где подробно описана причина ошибки) и debug(где лежит исходный запрос). В swagger описаны эти status, message, debug как отдельная сущность, которая подмешана через AllOf во все ответы api.

Artur-Karapetov Автор вопроса
Roman Timofeev
А с чем связан оверхед? Вот у нас есть api, которо...

оверхед связан с тем что: 1. надо дублировать транспортную информацию (статус код, дополнительную интерпретацию ошибки) 2. нельзя положиться на транспорт (так как транспорт может быть разным) и использовать его готовую логику как часть своей 3. как вы в свагере опишите вызов сервиса через amqp? вроде все

Artur Karapetov
оверхед связан с тем что: 1. надо дублировать тран...

1. Если в транспорт не транслировать ошибки, то и дублировать не надо :) 2. Не надо паразитировать на статусах транспорта. У него свои ошибки, у нас - свои. 3. Никак. Swagger для этого не предназначен. Вообще, цирк начинается когда вам прилетает 30x код в ответ на ваш метод.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта