Начало работы
Обзор
- Альтернативный подход к RESTful API
- GraphQL - это язык запросов для API.
- Легко описать форму API GraphQL с помощью понятных общих терминов.
- Клиенты выполняют запросы/мутации для чтения и обновления данных
- Синтаксис GraphQL может выражать сложные отношения между сущностями
- Библиотеки для реализации GraphQL на различных языках
GraphQL
{.link-arrow}
Схема
|
|
schema |
Определение схемы GraphQL |
query |
Чтение и просмотр данных |
мутация |
Изменение данных или инициирование действия |
subscription |
Запуск запроса при наступлении события |
Встроенные скалярные типы
|
|
Int |
Подписанное 32-битное целое число |
Float |
Подписанное значение с плавающей точкой двойной точности |
String |
Последовательность символов в формате UTF-8 |
Boolean |
true или false |
ID |
Уникальный идентификатор |
Определения типов
|
|
|
scalar |
type |
Object Type |
интерфейс |
Тип интерфейса |
union |
Union Type |
enum |
Enum Type |
input |
Input Object Type |
Модификаторы типов
|
|
String |
Нулевая строка |
String! |
Non-null String |
[String] |
Список нулевых строк |
|
[String]! |
[String!]! |
Ненулевой список ненулевых строк |
Входные аргументы
Основной ввод
тип Query {
users(limit: Int): [User]
}
Вход со значением по умолчанию
тип Query {
users(limit: Int = 10): [User]
}
Ввод с несколькими аргументами
тип Query {
users(limit: Int, sort: String): [User]
}
Ввод с несколькими аргументами и значениями по умолчанию
тип Query {
users(limit: Int = 10, sort: String): [User]
}
type Query {
users(limit: Int, sort: String = "asc"): [User]
}
type Query {
users(limit: Int = 10, sort: String = "asc"): [User]
}
Типы ввода
input ListUsersInput {
лимит: Int
since_id: ID
}
тип Мутация {
users(params: ListUsersInput): [User]!
}
Пользовательские скаляры
scalar Url
тип Пользователь {
имя: String
домашняя страница: Url
}
Интерфейсы
интерфейс Foo {
is_foo: Boolean
}
интерфейс Goo {
is_goo: Boolean
}
тип Bar реализует Foo {
is_foo: Boolean
is_bar: Boolean
}
type Baz implements Foo, Goo {
is_foo: Boolean
is_goo: Boolean
is_baz: Boolean
}
Объект, реализующий один или несколько интерфейсов
Союзы
тип Foo {
имя: String
}
тип Bar {
is_bar: String
}
союз SingleUnion = Foo
union MultipleUnion = Foo | Bar
тип Root {
single: SingleUnion
множественный: MultipleUnion
}
Объединение одного или нескольких объектов
Enums
enum USER_STATE {
НЕ_НАЙДЕН
ACTIVE
НЕАКТИВНЫЙ
SUSPENDED
}
тип Root {
stateForUser(userID: ID!): USER_STATE!
users(state: USER_STATE, limit: Int = 10): [User]
}
Также см.