API · Урок 57

GraphQL для фронта и бэка

В REST клиент получает фиксированный набор полей. В GraphQL клиент пишет, какие поля ему нужны, — ответ приходит ровно с ними. Разбираемся, где это выигрывает, а где REST надёжнее.

Запрос по контракту

query PostWithComments($id: ID!) {
  post(id: $id) {
    title
    body
    author { name }
    comments { text }
  }
}

# Ответ: ровно запрошенные поля, ничего лишнего

Мутации меняют данные (mutation), подписка — realtime (урок 37). Всё описывается одной схемой с типами — само-документирующийся API.

Клиент

import { GraphQLClient, gql } from "graphql-request";

const client = new GraphQLClient("/graphql");
const data = await client.request(gql`
  { posts { id title } }
`);
ℹ️
Когда REST лучше: простые вертикальные клиенты, кэширование на HTTP-уровне, публичные API без сложных графов данных. GraphQL — когда много клиентов и разные потребности в полях.
💡
Главный подводный камень GraphQL — «N+1»: один запрос может породить N запросов в базу для списка. Решается «data loader» — батчингом. Знание этого фокуса на интервью выглядит эффектно.