Учебники

GraphQL — система типов

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

Sr.No. Типы и описание
1

скаляр

Хранит одно значение

2

объект

Показывает, какой объект можно получить

3

запрос

Тип точки входа в другие конкретные типы

4

перегласовка

Точка входа для манипулирования данными

5

Enum

Полезно в ситуации, когда вам нужно, чтобы пользователь выбирал из заданного списка опций

скаляр

Хранит одно значение

объект

Показывает, какой объект можно получить

запрос

Тип точки входа в другие конкретные типы

перегласовка

Точка входа для манипулирования данными

Enum

Полезно в ситуации, когда вам нужно, чтобы пользователь выбирал из заданного списка опций

Скалярный тип

Скалярные типы — это примитивные типы данных, которые могут хранить только одно значение. Скалярные типы по умолчанию, которые предлагает GraphQL:

  • Int — 32-разрядное целое число со знаком

  • Float — значение с плавающей запятой двойной точности со знаком

  • Строка — UTF — последовательность из 8 символов

  • Boolean — верно или неверно

  • Идентификатор — уникальный идентификатор, часто используемый в качестве уникального идентификатора для выборки объекта или в качестве ключа для кэша.

Int — 32-разрядное целое число со знаком

Float — значение с плавающей запятой двойной точности со знаком

Строка — UTF — последовательность из 8 символов

Boolean — верно или неверно

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

Синтаксис для определения скалярного типа следующий:

field: data_type

Приведенный ниже фрагмент кода определяет поле с именем приветствия, которое возвращает значение String.

greeting: String

Тип объекта

Тип объекта является наиболее распространенным типом, используемым в схеме, и представляет собой группу полей. Каждое поле внутри типа объекта отображается на другой тип, что позволяет использовать вложенные типы. Другими словами, тип объекта состоит из нескольких скалярных типов или типов объектов.

Синтаксис для определения типа объекта приведен ниже —

type object_type_name
{
   field1: data_type
   field2:data_type 
   ....
   fieldn:data_type
}

Вы можете рассмотреть следующий фрагмент кода —

--Define an object type--

type Student {
   stud_id:ID
   firstname: String
   age: Int
   score:Float
}

--Defining a GraphQL schema--  

type Query
{
   stud_details:[Student]
}

Приведенный выше пример определяет тип данных объекта Student. Поле stud_details в корневой схеме Query вернет список объектов Student.

Тип запроса

Запрос GraphQL используется для получения данных. Это похоже на запрос ресурса в API на основе REST. Для простоты тип Query — это запрос, отправляемый из клиентского приложения на сервер GraphQL. GraphQL использует язык определения схемы (SDL) для определения запроса. Тип запроса является одним из многих типов корневого уровня в GraphQL.

Синтаксис для определения запроса приведен ниже.

type Query {
   field1: data_type
   field2:data_type
   field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}

Пример определения запроса —

type Query  {
   greeting: String
}

Тип мутации

Мутации — это операции, отправляемые на сервер для создания, обновления или удаления данных. Они аналогичны глаголам PUT, POST, PATCH и DELETE для вызова API на основе REST.

Мутация — это один из типов данных корневого уровня в GraphQL. Тип Query определяет точки входа для операций выборки данных, тогда как тип Mutation определяет точки входа для операций манипулирования данными.

Синтаксис для определения типа мутации приведен ниже —

type Mutation {
   field1: data_type
   field2(param1:data_type,param2:data_type,...paramN:data_type):data_type 
}

Например, мы можем определить тип мутации для добавления нового ученика, как показано ниже:

type Mutation {
   addStudent(firstName: String, lastName: String): Student
}

Тип Enum

Enum похож на скалярный тип. Перечисления полезны в ситуации, когда значение для поля должно быть из заданного списка опций.

Синтаксис для определения типа Enum —

type enum_name{
   value1
   value2
}

Следующий фрагмент иллюстрирует, как можно определить тип enum —

type Days_of_Week{
   SUNDAY
   MONDAY
   TUESDAY
   WEDNESDAY
   THURSDAY
   FRIDAY
   SATURDAY
}

Тип списка

Списки могут использоваться для представления массива значений определенного типа. Списки определяются с помощью модификатора типа [], который переносит типы объектов, скаляры и перечисления.

Следующий синтаксис может быть использован для определения типа списка —

field:[data_type]

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

type Query {
   todos: [String]
}

Тип Nullable

По умолчанию каждый из базовых скалярных типов может быть установлен в нуль. Другими словами, эти типы могут либо возвращать значение указанного типа, либо они могут не иметь значения. Чтобы переопределить это значение по умолчанию и указать, что поле должно быть определено, к типу можно добавить восклицательный знак (!). Это гарантирует наличие значения в результатах, возвращаемых запросом.

Следующий синтаксис может быть использован для определения ненулевого поля —

field:data_type!

В приведенном ниже примере stud_id объявлен как обязательное поле.