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

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

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

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

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

31 ответов

5 просмотров

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 код в ответ на ваш метод.

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

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

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
70
Здравствуйте. Задача состоит в том, чтобы сделать real-time чат в мобильном приложении. После передачи сообщения пользователем через веб-сокеты, для основного и долговременног...
🐾
5
Всем доброго дня, ребят подскажите пожалуйста, если в курсе по ассемблеру используется MASM32, могу ли я использовать FASM? В чем явная разница и будет ли у меня все работать?
Botsman
17
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
25
Книга Юрова В.И пойдёт для обучения?
Botsman
24
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Люди добрые, помогите с идеями, потому что свои закончились. У клиента падает софтина в момент инициализации модуля OtlEventMonitor на RegisterWindowMessage('Gp/OtlTaskEvents/...
Михаил Усков
7
Тут просто дело в том, что я не могу сейчас дать такие подробности из за того что рассчитать это всё нереально. Этого проекта который я хочу сделать ещё даже не существует) И ...
🐾
8
> Примечательно, что новый владелец удаляет из GitHub любые жалобы, указывающие на подозрительную активность или смену владельца, и, видимо, рассчитывает на то, что пользовате...
Alex Sherbakov
2
GridView fully ignored first parent(SizedBox), and take width from second parent(Container). How can I constrain GridView by first parent? Widget build(BuildContext context) {...
Hamster
1
Карта сайта