Изучение скаляров GraphQL: полное руководство по настройке типов данных

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 позволяют гибко обрабатывать типы данных так, чтобы они наилучшим образом соответствовали требованиям вашего приложения.