EXPEDIA GROUP ТЕХНОЛОДЖИ — ИНЖИНИРИНГ

Выпуск GraphQL Котлин 6.0.0

Поддержка Apollo Federation 2, оптимизация пакетных запросов, поддержка автоматических постоянных запросов и многое другое.

GraphQL Kotlin — это набор библиотек, созданных на основе GraphQL Java, который упрощает запуск клиентов и серверов GraphQL в Kotlin.

Последний основной выпуск 5.0.0 был выпущен в сентябре 2021 года, и теперь мы рады объявить о выпуске 6.0.0.

Полные примечания к выпуску можно найти здесь.

Основные изменения и особенности

Поддержка Федерации Аполлона 2

Federation v2 — это эволюция спецификации Federation, которая делает ее более мощной, гибкой и простой в адаптации. Хотя схемы v1 и v2 во многом схожи, в Federation v2 сняты некоторые ограничения и добавлены дополнительные возможности. См. Документацию по Apollo для получения подробной информации и нашу документацию по созданию схемы Federation v2.

Автоматическое распространение контекста сопрограммы

GraphQL Kotlin обеспечивает встроенную поддержку сопрограмм в сборщиках или преобразователях данных. В попытке стандартизировать то, как мы можем распространять CoroutineContext, созданный graphql-kotlin-server, пользователи теперь могут настраивать контекст сопрограммы, предоставляя запись CoroutineContext::class в GraphQLContext с помощью GraphQLContextFactory.
Подробнее см. #1459 и нашу документацию.

Десериализация аргументов больше не зависит от Джексона

Логика разбора DataFetcher аргументов больше не зависит от Джексона. Старая логика была проблематичной, так как аргументы, переданные сборщикам данных, уже были приведены к соответствующему типу с помощью graphql-java, но, поскольку Джексон не знал об этом, это приводило к дублированию десериализации. Это приводило к проблемам с десериализацией пользовательских скалярных входных данных. Подробнее см. #1379.

Обновление до GraphQL Java 18

Добавляет поддержку директивы прикладной схемы. В предыдущих версиях GraphQLDirective представлял как объект определения схемы, так и отдельные экземпляры, которые применялись к схеме или элементу запроса. Логика создания схемы была обновлена, чтобы продолжить создание определений схемы GraphQLDirective, а затем создать соответствующий экземпляр GraphQLAppliedDirective, который применяется к целевому элементу.
Подробности см. в #1393.

Автоматические постоянные запросы (APQ)

APQ — это метод, созданный Apollo для повышения производительности сети GraphQL с нулевой конфигурацией времени сборки за счет отправки меньших HTTP-запросов GraphQL, меньшая полезная нагрузка запроса снижает использование полосы пропускания и ускоряет время загрузки клиента GraphQL.
Сохраняемый запрос — это проанализированный и проверенный документ запроса, который кэшируется на сервере GraphQL Kotlin вместе с уникальным идентификатором (хэш SHA-256). Таким образом, клиенты могут отправлять этот идентификатор вместо соответствующего запроса, что резко уменьшит размер запроса.
Дополнительные сведения об использовании см. в документации сервера.

Пакетные HTTP-запросы GraphQL

Серверы GraphQL Kotlin теперь могут выполнять пакетные операции одновременно, тогда как раньше они выполняли пакетные операции последовательно. Это позволяет клиенту отправлять список операций GraphQL в одном пакетном HTTP-запросе, а общее время ответа теперь будет равно времени, которое потребовалось для решения самой медленной операции GraphQL в пакете.

Новые экземпляры инструментария используют DataLoaders в нескольких операциях GraphQL

Поскольку все больше и больше клиентов GraphQL полагаются на пакетные HTTP-запросы к серверу GraphQL для сокращения круговых обращений по сети, важно сохранить пакетную обработку и дедупликацию сборщиков или преобразователей данных во всех операциях в пакете.

Имея это в виду, мы добавили настраиваемый набор экземпляров инструментов, которые будут вычислять, когда наступает подходящий момент для отправки DataLoaderRegistry:

  1. DataLoaderLevelDispatchedInstrumentation:будет отправлять все загрузчики данных, когда будет отправлен определенный уровень для всех операций GraphQL в пакете.
  2. DataLoaderSyncExecutionExhaustedInstrumentation: наиболее оптимальное время для отправки всех загрузчиков данных — когда исчерпаны все возможные пути синхронного выполнения для всех операций GraphQL в пакете.

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

Обычные инструментальные реализации применяются к одному ExecutionInput или GraphQL Operation, тогда как эти пользовательские реализации применяются к нескольким операциям GraphQL (скажем, BatchRequest) и сохраняют свое состояние в GraphQLContext, позволяя выполнять пакетную обработку и дедупликацию транзакций в этих нескольких операциях GraphQL.

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

Дополнительная литература

Для получения дополнительной информации о том, как использовать библиотеку, ознакомьтесь с нашими предыдущими рассказами о GraphQL Kotlin ([1], [2], [3], [4]), примерами и доступной документацией. на страницах GitHub.

Мы также открыты для обратной связи, поэтому, пожалуйста, начните обсуждение или поднимите вопрос для любых новых функций, которые вы хотели бы видеть!

Спасибо мейнтейнеру graphql-kotlin Dariusz Kuc за помощь с этим объявлением.

Узнайте больше о технологиях в Expedia Group