Конвертер JSON в схему GraphQL
Вставьте ответ API в JSON и получите для него типы схемы GraphQL. Каждый объект становится типом, массивы — списками, а поля, которые есть всегда, получают !. Режим input создаёт входные типы для мутаций.
Работает в браузере: всё, что вы вводите, никуда не отправляется.
Как пользоваться
- Вставьте пример JSON — лучше настоящий ответ API, где в каждом массиве несколько элементов, чтобы найти необязательные поля.
- Выберите type для выходных типов или input для аргументов мутаций (к именам добавится суффикс Input).
- Скопируйте схему в файл .graphql и переименуйте Root во что-то осмысленное, например Book.
Как это работает
Пример разбирается в «форму»: каждый ключ со всеми видами значений, которые в нём встретились, причём все объекты массива сливаются в один тип.
- Имена полей, допустимые в GraphQL, сохраняются как есть; остальные (user-name) пересобираются в camelCase, а исходный ключ JSON остаётся в комментарии #.
- Типы идут от родителя к потомкам: сначала Root, затем вложенные в порядке появления.
- Для массива на верхнем уровне выводится комментарий вида # Top level: [RootItem!]! — этот тип и укажите у поля запроса.
Пример
{"line_items":[{"sku":"A","qty":2},{"sku":"B"}]} даёт:
type Root {
line_items: [LineItem!]!
}
type LineItem {
sku: String!
qty: Int
}
Во втором элементе нет qty, поэтому у него нет !, а тип элемента списка назван в единственном числе.
Советы
- В GraphQL принято называть поля в camelCase; snake_case-ключи можно переименовать и сопоставить в резолверах.
- Даты в JSON приходят строками; вместо String подумайте о скаляре DateTime.
- Имена типов и полей должны быть латиницей: ключи на кириллице калькулятор заменит на field с исходным ключом в комментарии.
Частые вопросы
Как значения JSON превращаются в типы GraphQL?
Строки — в String, true и false — в Boolean, целые числа — в Int, остальные — во Float (смесь целых и дробных даёт Float). Массивы становятся списками вроде [String!]!, а каждый объект получает свой тип с именем по ключу: author даёт Author, reviews — Review.
Когда поле получает знак ! (non-null)?
Когда значение нигде в примере не равно null и ключ есть в каждом объекте своего массива. Ключ, который в части объектов отсутствует или где-то равен null, остаётся необязательным. Выключите опцию, чтобы все поля были необязательными — так по умолчанию в GraphQL.
Что за скаляр JSON в результате?
В GraphQL нет типа «что угодно», поэтому место, где встречаются значения разных видов, только null или объект без ключей, получает пользовательский скаляр JSON, объявленный в начале. Серверу нужен для него резолвер — например GraphQLJSON из пакета graphql-scalars, — либо замените его настоящим типом.
id — это Int или ID?
Калькулятор не знает, что число — идентификатор, поэтому id: 42 станет Int. Int в GraphQL — 32-битное целое со знаком; для ключей и больших чисел замените тип вручную на ID (передаётся строкой) или Float.