В чём основная идея GraphQL и его отличие от REST?

«В чём основная идея GraphQL и его отличие от REST?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основное отличие от REST:

  • REST: Сервер определяет структуру и объём данных, возвращаемых на фиксированных эндпоинтах (GET /users/1, GET /users/1/posts). Это может привести к недополучению данных (нужно делать несколько запросов) или переполучению (эндпоинт возвращает лишние поля).
  • GraphQL: Клиент определяет структуру ответа в самом запросе, отправляя его на единственный эндпоинт (обычно /graphql).

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

query {
  user(id: "1") {
    name
    email
    posts(limit: 2) { # Запрашиваем только 2 последних поста
      title
      publishedAt
    }
  }
}

Пример ответа (JSON):

{
  "data": {
    "user": {
      "name": "Alice",
      "email": "alice@example.com",
      "posts": [
        { "title": "GraphQL Intro", "publishedAt": "2023-10-01" },
        { "title": "Advanced Queries", "publishedAt": "2023-10-15" }
      ]
    }
  }
}

Ключевые преимущества:

  1. Эффективность сети: Клиент получает ровно те данные, которые запросил, ни больше, ни меньше.
  2. Гибкость и скорость разработки фронтенда: Изменение требований к данным на клиенте часто не требует изменений на сервере.
  3. Строгая типизация: Система типов GraphQL (schema) служит контрактом между клиентом и сервером и позволяет автоматически генерировать документацию.

Технологии: Популярные серверные реализации включают Apollo Server (Node.js), GraphQL Java и Spring GraphQL.