Backend
October 15, 2023

Работа с GraphQL: создание API и запросы.

GraphQL - это язык для запросов к API (interface для программного обеспечения). Он позволяет клиенту (например, мобильному приложению) запрашивать у сервера ровно те данные, которые ему нужны.

Преимущества GraphQL

Почему GraphQL так популярен? Давай посмотрим на его основные преимущества:

  • Ты запрашиваешь только нужные данные. Не нужно загружать лишнюю информацию, как в обычных API. Это ускоряет работу и экономит трафик.
  • Один endpoint вместо множества. В GraphQL всего одна точка входа, в отличие от множества эндпоинтов в REST API. Это упрощает разработку.
  • Избавляет от перезапросов. Если данных не хватает, в REST приходится делать еще запросы. В GraphQL этого нет - сразу получаешь всё необходимое.
  • Поддержка типов. GraphQL использует типы, как в программировании. Это позволяет лучше структурировать данные.
  • Гибкость. Легко добавлять новые возможности и изменять API, не влияя на клиентов.
  • Описание данных. В GraphQL есть описание, какие данные можно запросить. Удобно для разработчиков.

В целом, GraphQL делает работу с API гораздо проще и продуктивнее!

Как устроен GraphQL

GraphQL состоит из 3 основных частей:

Схема

Схема описывает, какие данные доступны для запросов. Она состоит из типов, полей, запросов и мутаций. Схема - это как "карта" твоего API.

Типы

Типы - это структуры данных, например, User, Post, Comment. Они содержат разные поля, например, у User есть id, name, email.

Запросы и мутации

Запросы служат для получения данных с сервера. Например, можно запросить всех пользователей.

Мутации нужны для изменения и добавления данных, вроде создания нового пользователя.

Создание схемы

Давай посмотрим, как создаётся схема GraphQL. Вот простой пример:

type User {
  id: ID!
  name: String!
  age: Int!
}

type Query {
  users: [User!]!
}

Здесь мы определили:

  • Тип User с полями id, name, age
  • Тип Query с запросом users, который возвращает массив пользователей

Ключевые моменты:

  • ! означает, что поле обязательно
  • [] вокруг типа создаёт массив, например [User!]!

Это основы создания схемы. Дальше её можно расширять новыми типами и запросами.

Типы данных

GraphQL поддерживает множество разных типов. Самые важные:

  • String - для строк
  • Int - для чисел
  • Boolean - для логических значений
  • ID - для уникальных идентификаторов

Также есть типы для дат, массивов и других структур данных.

Типы можно делать обязательными с !, например id: ID!.

Кроме встроенных типов, можно создавать свои - пользовательские объекты, как User.

Запросы

Давай посмотрим, как строятся запросы в GraphQL. Вот пример:

query {
  users {
    id 
    name
  }
}

Здесь мы запрашиваем поля id и name для всех users.

Чтобы получить одного пользователя, добавим фильтр:

query {
  user(id: "1234") {
    id
    name
  }
}

Мы передали в запрос параметр id и запросили конкретного пользователя.

В запрос можно включать любые поля, связи между типами и вложенные запросы. Это даёт огромную гибкость при работе с API.

Мутации

Мутации нужны для изменения данных на сервере.

Например, чтобы создать нового пользователя:

mutation {
  createUser(name: "Bob", age: 35) {
    id
    name
    age
  }
}

Здесь createUser - это мутация для создания пользователя, в неё мы передали имя и возраст.

Также в ответе можно запросить новые данные пользователя.

Мутации используются для добавления, обновления или удаления данных на сервере.

Использование GraphQL

Как же использовать GraphQL в реальных приложениях?

Существуют библиотеки для работы с GraphQL API из разных языков программирования.

Например, в веб-приложениях часто используют библиотеку Apollo Client для JavaScript.

Вот пример кода для получения пользователей:

const {data} = useQuery(GET_USERS) 

return (
  <div> 
    {data.users.map(user => 
      <div>{user.name}</div>
    )}
  </div>
)

Здесь мы используем хук useQuery для запроса пользователей и выводим результат.

GraphQL удобно использовать с React, Angular, Vue.js и другими популярными фреймворками.

Что в итоге

GraphQL упрощает работу с API и решает многие проблемы REST. Язык активно развивается и обретает всё большую популярность. Надеюсь, эта статья помогла тебе понять, что такое GraphQL и почему он полезен.