Что такое GraphQL?

GraphQL — язык запросов и runtime для API, разработанный Facebook (ныне Meta). Клиент в одном HTTP-запросе описывает, какие поля и связи нужны; сервер возвращает JSON ровно этой формы. Это снижает over-fetching и under-fetching по сравнению с фиксированными REST-эндпоинтами.
flowchart LR Client["Клиент"] -->|query| GQL["GraphQL сервер"] GQL --> Schema["Схема + резолверы"] Schema --> DB["БД / сервисы"]
Клиент запрашивает дерево полей; резолверы достают данные из источников.
Схема, query и mutation
Схема (SDL) описывает типы Query, Mutation, Subscription. Query — чтение, Mutation — изменение. Резолвер — функция, которая по полю возвращает значение. Introspection позволяет клиентам и IDE (GraphiQL) изучать API без отдельной OpenAPI-спеки.
query {
user(id: "1") {
name
posts { title }
}
}
GraphQL и REST
REST даёт ресурсы по URL (/users/1, /users/1/posts) — иногда нужно несколько round-trip. GraphQL объединяет в один запрос, но усложняет кэширование на CDN (обычно POST) и требует контроля глубины/стоимости запросов (complexity limits, DataLoader против N+1).
Экосистема
Серверы: Apollo Server, GraphQL Yoga, Mercurius. Клиенты: Apollo Client, urql, Relay. Часто используют поверх существующего REST или ORM (Prisma, Drizzle) как единый BFF для фронтенда.
Когда уместен GraphQL
- Много клиентов (web, mobile) с разными наборами полей.
- Агрегация нескольких микросервисов за одним шлюзом.
- Быстрая итерация API без версионирования десятков REST-путей.
Спецификация: graphql.org.


Частые вопросы
GraphQL заменяет REST?
Не обязательно: GraphQL удобен для гибких клиентских API; REST проще кэшировать и документировать для публичных интеграций.
Что такое резолвер в GraphQL?
Функция, которая по имени поля в запросе возвращает данные — из БД, другого сервиса или вычисляет на лету.
Почему GraphQL часто POST?
Тело запроса содержит произвольный query; для кэша HTTP GET возможен, но на практике чаще POST с лимитами сложности.
Другие термины в теме «Веб-разработка»
Не хватает деталей?
Напишите, что уточнить по теме «GraphQL» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).