Опять день запуска! 🚀 Вчера мы запустили Open Federation, открытую спецификацию для создания федеративных API-интерфейсов GraphQL.

Сегодня мы запускаем WunderGraph Cosmo, альтернативу с открытым исходным кодом Apollo Federation, GraphOS, Studio и т. д. Cosmo — это комплексное решение для создания федеративных API-интерфейсов GraphQL, построенных на основе Open Federation и, следовательно, совместимых с подграфами Apollo Federation v1 и v2.

Это комплексное решение, включающее реестр схем, проверки схем, интерфейс командной строки, Studio, метрики, трассировку и телеметрию. Cosmo имеет лицензию Apache 2.0, вы можете использовать его как Управляемую службу или размещать самостоятельно. Исходный код можно найти на GitHub.

Почему Космо?

Более пяти лет мы участвуем в экосистеме GraphQL, создавая инструменты и сервисы на основе GraphQL, такие как graphql-go-tools, библиотека для создания шлюзов GraphQL на Go.

Меня всегда восхищала идея использования GraphQL для объединения нескольких API в один унифицированный API, поэтому я начал создавать GraphQL Engine/Gateway с открытым исходным кодом как часть GraphQL-Go-Tools. Изначально движок поддерживал API GraphQL и REST.

Когда Apollo объявил о федерации и директивах подграфов, меня сразу зацепило, и я расширил источник данных GraphQL, чтобы понять директивы подграфов. Однако после того, как первоначальная реализация была завершена, мое внимание переключилось на другие проекты и некоторое время к нему не возвращалось.

Перенесемся в 2023 год: все должно внезапно измениться. Мы внезапно начали получать все больше и больше запросов от компаний, которые искали инструменты с открытым исходным кодом для создания интегрированных API-интерфейсов GraphQL.

Одно повлекло за собой другое, и мы решили «взять» наш старый GraphQL Engine и построить на его основе полноценное решение: Cosmo! Мы решили пойти по тому же пути, что и Supabase, и создать альтернативу существующему решению с полностью открытым исходным кодом. Преимущества такого подхода очевидны. Никакой привязки к поставщику, больше прозрачности, и вы можете самостоятельно разместить все решение, если у вас есть строгие требования соответствия. Более того, я считаю, что в целом мы сможем создать лучшее решение, если кодовая база будет с открытым исходным кодом и сообщество сможет внести свой вклад.

Обзор Космо

На высоком уровне Cosmo состоит из четырех основных компонентов: реестра схемы/плоскости управления, студии/UI, маршрутизатора/плоскости данных и интерфейса командной строки для управления вашими графиками.

Космо Архитектура

Cosmo использует Open Telemetry (OTEL) для отслеживания, а также Prometheus для метрик. Cosmo поставляется с собственным маршрутизатором, написанным на Go. Маршрутизатор можно легко расширить и настроить.

В следующие два дня мы более подробно рассмотрим аналитику, трассировку и метрики, а также маршрутизатор.

Космо Студия

Cosmo Studio — это веб-интерфейс для управления графиками. Он создан с помощью NextJS и TailwindCSS.

Cosmo Studio дает вам краткий обзор ваших графиков и состояния их работоспособности, позволяет вам проверять схемы и типы всех ваших графиков, вы можете просматривать историю и журнал изменений ваших графиков, а также просматривать аналитику, метрики и следы ваши API GraphQL.

Составление федеративных API-интерфейсов GraphQL с проверками схемы

В основе Cosmo лежит реестр схем. Реестр схем отвечает за хранение схем ваших интегрированных API-интерфейсов GraphQL. Всякий раз, когда вы собираетесь развернуть новую версию подграфа, Cosmo позволит вам проверить, все ли подграфы по-прежнему совместимы друг с другом.

Существует сложный набор правил, которые необходимо реализовать, чтобы справиться со всеми различными случаями. Мы потратили пару месяцев на внедрение надежного и надежного решения этой проблемы. Благодаря всем компаниям, которые поддерживали нас все это время, у нас есть достаточно схем подграфов для тестирования нашей реализации. Как только мы будем уверены, что реализовали все правила правильно, мы добавим правила в Открытую федерацию, чтобы другие реализации также могли извлечь из этого выгоду.

Космо CLI

Cosmo поставляется с интерфейсом командной строки для управления графиками. Это довольно простой интерфейс командной строки, который позволяет вам управлять графиками и выполнять проверки схемы.

  1. создать новый график
npx wgc subgraph create products --label team=A --routing-url http://localhost:4001/graphql
  1. запустить проверку схемы
npx wgc subgraph check products --schema ./schemas/new_schema.graphql
  1. обновить график
npx wgc subgraph update products -r http://new-domain.com/graphql

Использование ИИ для исправления вашей схемы GraphQL

Когда мы экспериментировали с этим инструментом, мы заметили, что иногда проверки схемы завершались неудачей по вполне очевидным причинам, например: поле было удалено из типа, но все еще используется в качестве ключа в директиве @key. Мы подумали, почему бы не использовать ИИ, чтобы использовать результаты проверки схемы для автоматического исправления схемы?

Итак, мы добавили в CLI команду «исправить», чтобы сделать именно это. Зачем запрашивать изменения, если их можно исправить автоматически

npx wgc subgraph fix products --schema ../demo/subgraphs/products/products.graphql --out-schema ../demo/subgraphs/products/products-fix.graphql

Миграция с Apollo GraphOS на Cosmo

Итак, как можно опробовать Cosmo и перейти с Apollo GraphOS на Cosmo? На самом деле это довольно просто!

  1. Авторизуйтесь в Космо Студии
  2. Нажмите кнопку «Мигрировать» и следуйте инструкциям.
  3. Замените шлюз/маршрутизатор Apollo на маршрутизатор Cosmo
  4. сделанный!

Более подробную информацию можно найти в Руководстве по миграции.

Передай привет Космонавту

Какой же отличный инструмент без талисмана? Поздоровайтесь с «Космонавтом», путешествующим по вселенной в поисках новых графиков и соединяющих их всех.

Встретимся на GraphQL Conf на следующей неделе

Напоминаем, что на следующей неделе мы будем на GraphQL Conf в Сан-Франциско. Если вас интересуют Open Federation или Cosmo, приходите и поздоровайтесь!

Кроме того, я выступлю с докладом о Dataloader 3.0, который представляет собой подведение итогов пяти лет создания шлюзов API GraphQL. Я расскажу об эволюции загрузки данных в GraphQL и о том, как ее можно улучшить в будущем.

"Заключение"

Хорошо, это все на сегодня. Теперь взгляните на Репозиторий GitHub и поставьте ему ⭐️.

Если вы хотите узнать больше о Cosmo, ознакомьтесь с документацией.