Типы GraphQL
В GraphQL строгая типизация полей — каждое поле в GraphQL-схеме должно принадлежать одному из следующих типов:
Скалярные типы: Int, Float, String, Boolean, ID;
Кастомные скалярные типы: например, Date, DateTime;
Enum;
Сложные типы: Object, Interface, Union, Input;
Скалярные типы
GraphQL предоставляет набор встроенных скалярных типов:
Int — целое число со знаком (32-битное);
Float — число с плавающей точкой двойной точности со знаком;
String — последовательность символов в UTF-8 кодировке;
Boolean — логический тип (true или false);
ID — скалярный тип для уникальных идентификаторов, часто используется для повторного получения объекта или в качестве ключа для кеша.
Кастомные скалярные типы
В большинстве библиотек для работы с GraphQL есть возможность задать собственный скалярный тип.
Например, можно определить тип Date (в схеме он будет объявлен как scalarDate) и добавить текстовое описание, что в этом поле ожидается дата в формате «DD.MM.YYYY».
В GraphQL строгая типизация полей — каждое поле в GraphQL-схеме должно принадлежать одному из следующих типов:
Скалярные типы: Int, Float, String, Boolean, ID;
Кастомные скалярные типы: например, Date, DateTime;
Enum;
Сложные типы: Object, Interface, Union, Input;
Скалярные типы
GraphQL предоставляет набор встроенных скалярных типов:
Int — целое число со знаком (32-битное);
Float — число с плавающей точкой двойной точности со знаком;
String — последовательность символов в UTF-8 кодировке;
Boolean — логический тип (true или false);
ID — скалярный тип для уникальных идентификаторов, часто используется для повторного получения объекта или в качестве ключа для кеша.
Кастомные скалярные типы
В большинстве библиотек для работы с GraphQL есть возможность задать собственный скалярный тип.
Например, можно определить тип Date (в схеме он будет объявлен как scalarDate) и добавить текстовое описание, что в этом поле ожидается дата в формате «DD.MM.YYYY».
👍2👏2❤1🔥1
Enum
GraphQL поддерживает перечисляемые типы — Enum.
Допустим, мы хотим описать в схеме все значения статуса заказа, чтобы клиент и сервер всегда понимали, какие значения статусов могут быть отправлены.
Object
Базовый компонент GraphQL схемы — это тип Object. Он представляет собой объект, который можно получить из сервиса. Внутри объекта хранятся поля и их значения. Поля могут быть скалярными, enum, ссылаться на другие объекты или иметь тип Union или Interface.
Interface
Если в нескольких объектах есть общие поля, которые возвращают одни и те же данные — их можно выделить в интерфейс.
Например, нам нужно описать в схеме 2 разных вида продуктов: съедобные (food) и несъедобные (non-food). У каждого вида есть характеристики.
Union
Если типы мало совместимы между собой, но всё же нужно вернуть сразу несколько объектов из разных типов, то можно использовать объединения - Union.
Допустим, у пользователя есть возможность добавить в заказ не только товары, но и услуги — например, доставку или сборку.
GraphQL поддерживает перечисляемые типы — Enum.
Допустим, мы хотим описать в схеме все значения статуса заказа, чтобы клиент и сервер всегда понимали, какие значения статусов могут быть отправлены.
Object
Базовый компонент GraphQL схемы — это тип Object. Он представляет собой объект, который можно получить из сервиса. Внутри объекта хранятся поля и их значения. Поля могут быть скалярными, enum, ссылаться на другие объекты или иметь тип Union или Interface.
Interface
Если в нескольких объектах есть общие поля, которые возвращают одни и те же данные — их можно выделить в интерфейс.
Например, нам нужно описать в схеме 2 разных вида продуктов: съедобные (food) и несъедобные (non-food). У каждого вида есть характеристики.
Union
Если типы мало совместимы между собой, но всё же нужно вернуть сразу несколько объектов из разных типов, то можно использовать объединения - Union.
Допустим, у пользователя есть возможность добавить в заказ не только товары, но и услуги — например, доставку или сборку.
👍2🔥2❤1👏1
Input
Если нужно объединить в какую-то сложную структуру входные параметры - используется Input.
По структуре и схеме Input очень похож на объект.
Списки в GraphQL
Списки могут реализовываться через массивы и соединения (Connection). Рассмотрим, чем отличаются два этих способа и в каких случаях используются.
Массивы
Мы уже упоминали, что квадратные скобки [] у типа указывают на то, что поле возвращает список значений.
Connection
Этот паттерн основан на спецификации Relay и предоставляет стандартный способ работы со списками объектов. Для объекта, по которому мы хотим предоставлять соединение, создаются дополнительные объекты, которые содержат поля для пагинации и метаинформацию.
Операции GraphQL
Помимо типов, схема определяет все возможные операции, доступные в GraphQL:
Query — получение данных;
Mutation — изменение данных;
Subscription — подписки на real-time обновления.
Если нужно объединить в какую-то сложную структуру входные параметры - используется Input.
По структуре и схеме Input очень похож на объект.
Списки в GraphQL
Списки могут реализовываться через массивы и соединения (Connection). Рассмотрим, чем отличаются два этих способа и в каких случаях используются.
Массивы
Мы уже упоминали, что квадратные скобки [] у типа указывают на то, что поле возвращает список значений.
Connection
Этот паттерн основан на спецификации Relay и предоставляет стандартный способ работы со списками объектов. Для объекта, по которому мы хотим предоставлять соединение, создаются дополнительные объекты, которые содержат поля для пагинации и метаинформацию.
Операции GraphQL
Помимо типов, схема определяет все возможные операции, доступные в GraphQL:
Query — получение данных;
Mutation — изменение данных;
Subscription — подписки на real-time обновления.
❤5👍3🔥2👏1