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» — батчингом. Знание этого фокуса на интервью выглядит эффектно.