Опять день запуска! 🚀 Вчера мы запустили 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 поставляется с интерфейсом командной строки для управления графиками. Это довольно простой интерфейс командной строки, который позволяет вам управлять графиками и выполнять проверки схемы.
- создать новый график
npx wgc subgraph create products --label team=A --routing-url http://localhost:4001/graphql
- запустить проверку схемы
npx wgc subgraph check products --schema ./schemas/new_schema.graphql
- обновить график
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? На самом деле это довольно просто!
- Авторизуйтесь в Космо Студии
- Нажмите кнопку «Мигрировать» и следуйте инструкциям.
- Замените шлюз/маршрутизатор Apollo на маршрутизатор Cosmo
- сделанный!
Более подробную информацию можно найти в Руководстве по миграции.
Передай привет Космонавту
Какой же отличный инструмент без талисмана? Поздоровайтесь с «Космонавтом», путешествующим по вселенной в поисках новых графиков и соединяющих их всех.
Встретимся на GraphQL Conf на следующей неделе
Напоминаем, что на следующей неделе мы будем на GraphQL Conf в Сан-Франциско. Если вас интересуют Open Federation или Cosmo, приходите и поздоровайтесь!
Кроме того, я выступлю с докладом о Dataloader 3.0, который представляет собой подведение итогов пяти лет создания шлюзов API GraphQL. Я расскажу об эволюции загрузки данных в GraphQL и о том, как ее можно улучшить в будущем.
"Заключение"
Хорошо, это все на сегодня. Теперь взгляните на Репозиторий GitHub и поставьте ему ⭐️.
Если вы хотите узнать больше о Cosmo, ознакомьтесь с документацией.