Что такое GraphQL и чем он отличается от REST?

Ответ

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

Ключевые отличия от REST:

ХарактеристикаRESTGraphQL
ЭндпоинтыМножество эндпоинтов (/users, /posts/:id)Обычно один эндпоинт (/graphql)
Структура ответаОпределяется серверомОпределяется клиентом в запросе
Загрузка данныхЧасто приводит к over-fetching (лишние данные) или under-fetching (нужно делать доп. запросы)Клиент получает ровно те данные, которые запросил
ТипизацияНе встроена в стандарт (используются внешние спецификации, как OpenAPI)Строгая система типов — основа языка. Схема API является контрактом.

Пример запроса GraphQL:

Клиент хочет получить имя пользователя и заголовки только его постов. Он формирует запрос, точно описывающий нужную структуру:

query GetUserWithPosts {
  user(id: "1") {
    name
    posts {
      title
    }
  }
}

Основные концепции GraphQL:

  • Схема (Schema): Определяет все типы данных и операции, доступные в API.
  • Запросы (Query): Операции для чтения данных.
  • Мутации (Mutation): Операции для изменения данных (создание, обновление, удаление).
  • Подписки (Subscription): Позволяют клиентам подписываться на события и получать обновления в реальном времени (например, через WebSockets).

В Go для создания GraphQL-серверов популярны библиотеки gqlgen и graphql-go/graphql.