Как запросить вашу схему с помощью фрагментов GraphQL
Также доступно по адресу https://atheros.ai/blog/how-to-query-your-schema-with-graphql-fragments без платного доступа.
Что такое фрагмент GraphQL
Во-первых, мы должны ответить на вопрос: «Что такое фрагмент»?
Фрагмент - это, по сути, многократно используемый фрагмент запроса.
В GraphQL вам часто нужно запрашивать одни и те же поля данных в разных запросах. Код для определения этих полей должен быть написан несколько раз, что приведет к большему количеству ошибок. Повторно используя этот код, мы можем более эффективно использовать свое время и повторно использовать эти части логики запросов в разных запросах. Но как мы можем использовать это в GraphQL? Допустим, мы хотим использовать тот же запрос, что и в этой статье о псевдонимах.
Как использовать фрагменты GraphQL
Вы можете начать с клонирования нашего репозитория примеров
git clone [email protected]:atherosai/graphql-gateway-apollo-express.git
установить зависимости с помощью
npm i
и запустите сервер в разработке с
npm run dev
После этого вы должны получить доступ к GraphQL Playground. Затем вы сможете выполнить запрос, в котором используется концепция псевдонимов:
Мы видим, что есть еще возможности для улучшения, поскольку поля каждого запроса повторяются несколько раз. Поскольку это один и тот же набор выбора, мы можем определить поля только один раз, а затем ссылаться на них по мере необходимости. Для этого мы можем использовать фрагмент. Каждый фрагмент состоит из разных частей. Давайте посмотрим на этот пример простого фрагмента:
Теперь мы можем переписать запрос getUsers с помощью оператора фрагмента и распространения.
Результаты те же, но с точки зрения рефакторинга и повторного использования кода такой способ написания запросов дает много преимуществ.
Встроенные фрагменты
Встроенные фрагменты полезны для запросов, в которых мы должны разрешить тип во время выполнения. Мы также используем встроенные фрагменты, когда нам нужно реализовать один из абстрактных типов в GraphQL (например, Union или Interface). Самый распространенный пример интерфейса - это интерфейс узла, как мы обсуждали в модуле Интерфейсы. Union обычно используется для реализации поиска в GraphQL. Когда мы запрашиваем эти типы, мы должны использовать встроенный фрагмент для условного выполнения. Этот поисковый запрос показывает, как может выглядеть этот встроенный фрагмент:
Заявления о пользователе и о компании являются условиями типа. С помощью условий типа мы можем применить каждый фрагмент к разному типу в схеме, даже если оба типа Пользователь и Компания имеют разные поля.
Заключение
В других случаях фрагменты также часто используются в клиентах внешнего кэширования, таких как Relay или Apollo. В Relay у нас есть так называемый контейнер фрагментов, который определяет требования к данным компонента. В apollo-client мы используем концепцию фрагментов для так называемого коллокации запросов. Фрагменты в этих кэширующих клиентах в основном идеально подходят для данных, необходимых для компонентов пользовательского интерфейса. Это может быть использовано в наших интересах для статической типизации с помощью Flow или TypeScript. Мы можем сгенерировать определения TypeScript или Flow из нашей схемы GraphQL и использовать эти определения в качестве определения типа опоры для нашего компонента пользовательского интерфейса. Один из лучших инструментов для этого - GraphQL CodeGen.
Эта статья изначально была опубликована по адресу https://atheros.ai/blog/how-to-query-your-schema-with-graphql-fragments
Вам понравился этот пост? Репозиторий с примерами и настройками проекта можно клонировать здесь. Не стесняйтесь присылать любые вопросы по теме на [email protected].