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]
}