GraphQL — это мощный язык запросов для API, который позволяет клиентам запрашивать конкретные данные, которые им нужны. Хотя GraphQL имеет встроенные скалярные типы, такие как String, Int, Boolean, Float и ID, вы можете столкнуться со сценариями, в которых вам потребуется работать с пользовательскими типами данных. В этой статье мы углубимся в скаляры GraphQL и рассмотрим различные методы создания и использования пользовательских типов скаляров с примерами кода.
Метод 1: использование встроенных скаляров
Самый простой способ работы со скалярными типами в GraphQL — использовать встроенные. Вот пример схемы GraphQL с использованием некоторых встроенных скаляров:
type User {
id: ID!
name: String!
age: Int!
email: String!
isSubscribed: Boolean!
rating: Float!
}
Метод 2: создание пользовательских скаляров
Иногда встроенных типов скаляров может быть недостаточно для конкретных случаев использования. В таких ситуациях вы можете определить свои собственные скалярные типы. Вот пример создания собственного скалярного типа под названием DateTime:
scalar DateTime
type Event {
id: ID!
name: String!
date: DateTime!
}
.
Метод 3: реализация пользовательских скаляров в коде
Чтобы использовать пользовательский тип скаляра, вам необходимо определить, как он будет вести себя во время выполнения. Это включает в себя реализацию логики сериализации и синтаксического анализа. Давайте рассмотрим пример пользовательского скаляра под названием PhoneNumber:
const { GraphQLScalarType } = require('graphql');
const PhoneNumberScalar = new GraphQLScalarType({
name: 'PhoneNumber',
description: 'A custom scalar type to represent phone numbers',
serialize(value) {
// Serialize the value when sending responses
return value.toString();
},
parseValue(value) {
// Parse the value when receiving input variables
return parsePhoneNumber(value);
},
parseLiteral(ast) {
// Parse the value when receiving inline input
return parsePhoneNumber(ast.value);
},
});
.
Метод 4: использование внешних библиотек для пользовательских скаляров
Если вам нужны более сложные типы пользовательских скаляров, вы можете использовать внешние библиотеки. Например, библиотека graphql-iso-dateпредоставляет предварительно определенный скалярный тип DateTime, соответствующий стандарту ISO 8601. Вот пример использования его в вашей схеме GraphQL:
const { GraphQLDateTime } = require('graphql-iso-date');
const typeDefs = `
scalar DateTime
type Event {
id: ID!
name: String!
date: DateTime!
}
`;
В этой статье мы рассмотрели различные методы работы со скалярами GraphQL. Мы начали с использования встроенных скаляров, затем перешли к созданию собственных скаляров и реализации их в коде. Дополнительно мы обсудили возможность использования внешних библиотек для более сложных сценариев. Понимая и используя эти методы, вы сможете настроить API GraphQL для эффективной обработки широкого спектра типов данных.
Не забудьте выбрать подходящий метод в зависимости от вашего конкретного случая использования. Скаляры GraphQL позволяют гибко обрабатывать типы данных так, чтобы они наилучшим образом соответствовали требованиям вашего приложения.