Краткий справочник

GraphQL шпаргалка

Быстрый справочник по GraphQL: синтаксис запросов, аргументы, псевдонимы, фрагменты, мутации, определения схемы SDL, скаляры и HTTP.

· Опубликовано

GraphQL — язык запросов для API и среда выполнения для обработки запросов с использованием ваших существующих данных.

Запросы (Queries)

Базовый запрос и ответ JSON

{ status }

JSON Response:

{
  "data": {
    "status": "available"
  }
}

Вложенные объекты

{
  hero {
    name
    height
  }
}

Списки

{
  friends {
    name
  }
}

Аргументы

{
  hero(id: "1000") {
    id
    name
  }
}

Псевдонимы (Aliases)

{
  luke: hero(id: "1000") {
    name
  }
  han: hero(id: "1001") {
    name
  }
}

Имена операций и переменные

Query Definition:

query FindHero($id: String!) {
  hero(id: $id) {
    name
  }
}

Variables Payload (JSON):

{
  "id": "1000"
}

Мутации (Mutations)

mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
  createReview(episode: $ep, review: $review) {
    stars
    commentary
  }
}

Встроенные фрагменты (Inline Fragments)

{
  search(q: "john") {
    id
    ... on User {
      name
    }
    ... on Comment {
      body
      author {
        name
      }
    }
  }
}

GraphQL через HTTP

Запрос GET

fetch('https://api.example.com/graphql?query={me{name}}')

Запрос POST

fetch('https://api.example.com/graphql', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    query: 'query GetHero($id: String!) { hero(id: $id) { name } }',
    variables: { id: '1000' }
  })
})

Язык определения схемы (SDL)

Базовые типы

type Query {
  me: User
  users(limit: Int): [User]
}

type User {
  id: ID!
  name: String
}

Встроенные скалярные типы

Скаляр Описание
Int 32-битное целое число со знаком
Float Число с плавающей точкой двойной точности
String Последовательность символов UTF-8
Boolean Логическое значение true или false
ID Уникальный идентификатор, сериализуемый как строка

Ключевые слова определения типов

Ключевое слово Описание
type Объектный тип, представляющий набор полей
scalar Пользовательский примитивный скалярный тип
interface Абстрактный тип с полями, обязательными для реализации
union Абстрактный тип, объединяющий несколько типов объектов
enum Перечисление разрешенных строковых значений
input Сложный входной объект, передаваемый в виде аргумента

Модификаторы типов (Type Modifiers)

Модификатор Описание
String Строка, допускающая null
String! Обязательная строка (non-nullable)
[String] Список, допускающий null, с элементами nullable
[String]! Обязательный список с элементами nullable
[String!]! Обязательный список с обязательными элементами

Интерфейсы (Interfaces)

interface Entity {
  id: ID!
}

type User implements Entity {
  id: ID!
  name: String
}

Перечисления (Enums)

enum Direction {
  NORTH
  EAST
  SOUTH
  WEST
}

Объединения (Unions)

union SearchResult = Human | Droid | Starship

type Query {
  search(text: String): [SearchResult]
}

Ссылки и документация

Связанные темы