Size: a a a

Software Design/Architecture/Zen

2020 December 24

AD

Andrey Dembitskyi in Software Design/Architecture/Zen
Константин Грачев
Я то ли фигню какую то читаю, то ли это слой трансформации из общей апи..
always has been
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
Andrey Dembitskyi
always has been
То есть ответ на мой вопрос делать мне 1 или 2 апи - делать 3 апи?))
источник

AD

Andrey Dembitskyi in Software Design/Architecture/Zen
Константин Грачев
То есть ответ на мой вопрос делать мне 1 или 2 апи - делать 3 апи?))
это один из вариантов, да
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
Да смысле. Статьи по BFF начинаются с того что делать general purpose api сложно и тяжело, поэтому давайте продолжим её делать, но сверху ещё слоёв трансформации наделаем? Логика алло
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Константин Грачев
То есть ответ на мой вопрос делать мне 1 или 2 апи - делать 3 апи?))
Ты либо делаешь продуманный general purpose api, либо под каждый тип клиента по апишке
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
Dmitriy Tkachenko
Ты либо делаешь продуманный general purpose api, либо под каждый тип клиента по апишке
По апишке на клиент понятно. Не понятно почему стать по BFF предлагают какие то слои траснформации поверху GPA. Либо я не так понял
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Константин Грачев
Да смысле. Статьи по BFF начинаются с того что делать general purpose api сложно и тяжело, поэтому давайте продолжим её делать, но сверху ещё слоёв трансформации наделаем? Логика алло
Слои трансформации - это адаптеры к внутреннему апи твоего приложения
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
General purpose api такой же адаптер, но обслуживает все возможные юзкейсы
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
Dmitriy Tkachenko
Слои трансформации - это адаптеры к внутреннему апи твоего приложения
Вкурил, спасибо.
Иногда ощущение, что пока одни топят за простой и понятный код, другие его описывают сложными и непонятными словами
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
Точнее не непонятными, а вводящими в заблуждение
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
В твоём случае с аутентификацией будет примерно так. Для фронт-клиента

Function frontendApiAuth() { app.authenticate() }

Для интеграций
Function integrationApiAuth() { app.authenticate() }
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Константин Грачев
Вкурил, спасибо.
Иногда ощущение, что пока одни топят за простой и понятный код, другие его описывают сложными и непонятными словами
Простой и понятный код когда ты его пишешь отличается от простого и понятного кода, когда ты его читаешь или модифицируешь
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
Dmitriy Tkachenko
Простой и понятный код когда ты его пишешь отличается от простого и понятного кода, когда ты его читаешь или модифицируешь
Я про то что относительно простые штуки люди любят описывать сложными словами
источник

SZ

Sergey Zolotov in Software Design/Architecture/Zen
Константин Грачев
Да смысле. Статьи по BFF начинаются с того что делать general purpose api сложно и тяжело, поэтому давайте продолжим её делать, но сверху ещё слоёв трансформации наделаем? Логика алло
ну вообще он идет типа поверх твоего супа из микросервисов. из BFF ходят в нужные и собирают для клиента ответ, чтобы не пытаться городить универсальный гейтвей
источник

AK

Aleh Kashnikau in Software Design/Architecture/Zen
Константин Грачев
Есть апи и 2 личных кабинета. Для админа и для клиента.
На сколько нормальная идея делать 2 разных апи эндпоинта?
Столкнулся с тем, что 80% методов по сути разные. Где то просто ответы разные в силу ограничения доступа к полям. Где то функционал относится только к одному из кабинетов.

Ну то есть я всегда считал, что апи вроде как должна быть client agnostic и бекенду должно быть фиолетово пришел к нему запрос от SPA или запрос по крону от партнёра
Нормально иметь для разных целей разные методы
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
Aleh Kashnikau
Нормально иметь для разных целей разные методы
Речь не про методы, а про разные апи
источник

КГ

Константин Грачев... in Software Design/Architecture/Zen
Sergey Zolotov
ну вообще он идет типа поверх твоего супа из микросервисов. из BFF ходят в нужные и собирают для клиента ответ, чтобы не пытаться городить универсальный гейтвей
Без микросервисов не работает?)
источник

AK

Aleh Kashnikau in Software Design/Architecture/Zen
Константин Грачев
Речь не про методы, а про разные апи
Разные методы апи, это сути не меняет
источник

SZ

Sergey Zolotov in Software Design/Architecture/Zen
Константин Грачев
Без микросервисов не работает?)
суть та же будет. 2 разных набора эндпоинтов, а модули юзают общие
источник
2020 December 25

П

Павел in Software Design/Architecture/Zen
Такой вопрос. Есть отчёт, пусть будет отчёт ордеров. Клиент может получить его в 3 вариантах: агрегированный маленький отчетик в виде  json. Детальный в виде CSV. Такой же детальный в виде екселя.

Отчёт строится так: сервимс возвращает курсор типа Iterable<Order> orders. Эти orders передаются в builder и тот начинает строить. Итнрируетсчя по курсору и строит отчёт. Но для каждого вида строит по разному.

Для json, на каждом шаге итерации просто высчитываются данные каждой записи, и накапливаются. Когда цикл закончился, из данных формируется отчёт, типа всего столько записей, успешных столько, не успешных столько и т.д

Для CSV  и екселя работает точно такой же цикл, точно так же высчитывается по тем же формулам суммарный агрегированный отчетик, но в дополнение ещё и по каждой записи, и каждая запись пишется в сам отчёт.

И тут проблема. Я не могу построить весь отчёт и вернуть его билдером. Я сразу пишу его в httpResponse.outputStream. тоесть метод у меня возвращает void а в первом случае возвращает объект, который потом преобразуется в json. Поэтому сейчас есть 3 класса в которых один и тот же алгоритм, и в то же время разный. Пробовал выделять абстрактные методы но не ложиться на задачу.

Кароче написал много, возможно сумбурно, вопрос такой если совсем не понятно, вы делали такое? Один и тот же отчёт вернуть в разных форматах? Как строили архетиктур? Какой класс за что отвечал?
источник