Size: a a a

Архитектура ИТ-решений

2021 June 25

PD

Phil Delgyado in Архитектура ИТ-решений
И как тут graphql поможет?
источник

PD

Phil Delgyado in Архитектура ИТ-решений
При этом датамодели для бэкофиса, десктопа и API - сильно отличается )
источник

PD

Phil Delgyado in Архитектура ИТ-решений
graphql - хорошее решение, когда надо быстро налабать хрень, при этом есть только фронтендер и одна база данных. Тогда можно поставить graphql поверх БД и делать классическую двузенку в стиле 90х.
Собственно, graphql - это "миллиеналы изобрели двузвенку". Ну, в конце 80х это даже казалось интересным. В конце 90х уже нет.
источник

p

pragus in Архитектура ИТ-решений
Так и? Раньше это писалось в слое БЛ/хендлерах, а теперь в ресолверах.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Не, без планировщика запроса в ресолвере это не сделать. А такого не предполагается, увы.
И при чем тут БЛ, это дело bff под конкретный бизнес-кейс и все.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Но фронтед сейчас и находится где-то в конце 90х, так что логично изобретение graphql.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
(И, кстати, в двузвенках очень быстро отказались от прямых запросов к БД и стали делать промежуточный слой из хранимых процедур. Ровно по тем же причинам, по которым лучше bff, нежели graphql)
источник

p

pragus in Архитектура ИТ-решений
О каких моделях речь, если клиент сам говорит какие поля ему нужны? Авторизация - это вообще сбоку. В ресолвере у тебя уже конкретный юзер со всеми его ролями.
Если у пользователя нет прав на получение данных, просто не отдаём их в ресолвере.

В итоге, клиент может попросить что-то что ему нельзя, но в ответе этих данных не будет
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Модель - это не про поля (не только про поля), это про их связь и вообще про основной набор сущностей.
Ну и для конкретного клиента далеко не все поля доступны (мягко говоря). И далеко не все сущности.
Авторизация - это не только (и не столько) про роли, там все гораздо, гораздо сложнее, особенно для бэкофиса.
источник

p

pragus in Архитектура ИТ-решений
[frontend] <=gql=> [bff] <=> [internal services]

bff - это паттерн, который реализован в gql-сервере.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Эээ, bff - это про "слой, который прячет сложность и готовит данные под конкретного клиента".
У тебя не может быть и gql и bff одновременно, это противоположные паттерны.

Разве что у тебя специализированные сервера gql под каждый вид клиента и его запросы.
Т.е. один apollo (c набором ресолверов, оптимизаций и т.п.) под мобилку, другой - под десктоп и т.п.
Но тогда зачем вообще gql?
источник

p

pragus in Архитектура ИТ-решений
Почему "такого не предполагается"?  Можно расставлять косты хоть на поля
источник

p

pragus in Архитектура ИТ-решений
> У тебя не может быть и gql и bff одновременно, это противоположные паттерны.

Почему?
источник

PD

Phil Delgyado in Архитектура ИТ-решений
А как эти косты работают? И ты про какую реализацию graphql сервера? И как в ней работает балансировщик?
Какие схемы джойнов поддерживаются? Работает ли с индексами? Как определяет селективность?
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Я уже раза три объяснял, не?
источник

PD

Phil Delgyado in Архитектура ИТ-решений
В общем случае, grapqhl - про доступ к данным независимо от клиента, bff - про автономию клиента и его bff.
Да, можно их объединять, если поднимать различное graphql api под каждого клиента и эти api будут независимыми.
Хотя мне не понятны причины для такого решения (кроме нескольких corner case)
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
Хорошо сформулировал.  Проблема (а иногда достоинство) GraphQL в том что прикладная логика утекает во фронт. BFF изолирует логику от фронта, превращает его в тонкий клиент, который лишь рисует отображение.
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
У меня есть такой пример. Мобильные приложения. Всю дорогу мы боролись за то чтобы приложение было тонким клиентом и лишь отображало инструкции сервера.
В этом кейсе BFF сервис суть часть мобильного приложения, расположенная на стороне сервера.
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
сервер обновлять быстро и легко, приложение обновлять долго и трудно
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
даже если сделать релиз за один час, все равно он докатится до большинства устройств пользователей в течение порядка квартала
источник