- Оригинальный адрес:GraphQL Server Design @ Medium
- Оригинальный автор:Sasha Solomon
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:EmilyQiRabbit
- Корректор:KarthusLorin,weibinzhu
Дизайн сервиса GraphQL от Medium
Некоторое время назад мыбыл введенкак пользоватьсяGraphQLПеренести проект наReact.jsи сервис-ориентированная архитектура. Теперь мы хотим представить, как структура службы GraphQL помогает нам сделать миграцию более плавной и плавной.
Прежде чем мы приступим к разработке службы GraphQL, мы должны помнить о трех вещах:
Легко изменить формат данныхВ настоящее время мы используембуферы протоколовкак схема модели данных из бэкенда. Однако то, как мы используем данные, меняется, и буферизация протокола не следует. Это означает, что наш формат данных не всегда соответствует желанию клиента.
Четко различайте, какие данные предназначены для клиентаВ сервисе GraphQL данные передаются на разных стадиях «готовности» клиента. Мы должны сделать состояние готовности каждого из них более понятным, а не объединять их так, чтобы мы могли точно знать эти данные для клиента.
Легко добавлять новые источники данныхТеперь, когда мы переходим к сервис-ориентированной структуре, мы хотим убедиться, что добавлять новые источники данных в нашу службу GraphQL легко, а также четко указать, откуда берутся данные.
Имея это в виду, мы можем построить структуру службы с тремя разными ролями:
Getler Fetcher Сборщики, репозиторий (REPOS) и режим Graphql.
Иерархический блок ответственности
Каждый слой имеет свои обязанности и взаимодействует только с его верхними слоями. Давайте поговорим о том, что каждый слой имеет конкретно.
Фортес
Получайте данные из любого количества источников
Целью геттера является получение данных из источника данных. Данные, полученные сервисом GraphQL, должны были завершить добавление или изменение бизнес-логики.
Геттер должен соответствовать порту REST или gRPC. Геттер ожидает протокольный буфер protobuf. Это означает, что любые данные, полученные сборщиком, должны следовать схеме, определенной буферами протокола.
хранилище
Расчетные данные по желанию заказчика
Модели GraphQL используют репозитории в качестве хранилищ данных. Репозитории «хранят» обработанные данные из источников данных.
На этом шаге мы можем упаковать или развернуть поля и объекты, переместить данные и т. д., чтобы преобразовать данные в нужный клиенту формат.
При преобразовании из устаревших систем этот шаг необходим, поскольку он дает нам свободу обновлять формат данных для клиента без обновления или добавления интерфейсов и соответствующих буферов протоколов.
Репозитории получают данные только от геттеров и никогда сами не запрашивают внешние данные. Другими словами, репозиторий создает только те данные, которые нам нужны.Формат, но они не «знают», откуда взялись данные.
Модель GraphQL
Модель клиента отправляется из объекта репозитория
Модель GraphQL — это формат, выбранный при отправке данных клиенту.
Модели GraphQL используют только данные репозитория и никогда не взаимодействуют напрямую с геттерами. Это позволяет нам четко разделить проблемы.
Кроме того, модель GraphQL полностью получена из модели репозитория. Модель не будет изменять данные, ей это не нужно: хранимые данные были преобразованы в нужный нам формат, поэтому модель может только использовать данные. Таким образом, в каком формате данных или где мы можем манипулировать форматом данных, вы не можете спутать a.
Поток данных службы GraphQL
Как проходит поток данных в сервисе GraphQL
Когда данные проходят через разные уровни, их формат становится более похожим на то, что хочет клиент. Понятно, откуда берутся данные на каждом шаге, и мы знаем, за что отвечает каждая часть сервиса.
Эти абстрактные границы означают, что мы можем поэтапно мигрировать устаревшие системы, заменяя различные источники данных, не переписывая всю систему. Это делает наш подход к миграции ясным и простым для понимания, а также упрощает переход к сервис-ориентированной архитектуре, не меняя все сразу.
Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.