GraphQL

GraphQL — это язык запросов для API и среда выполнения, которая позволяет клиентам запрашивать именно те данные, которые им нужны.

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

  • Схема (Schema) — определяет структуру API
  • Запросы (Queries) — чтение данных
  • Мутации (Mutations) — изменение данных
  • Подписки (Subscriptions) — real-time обновления
  • Резолверы (Resolvers) — функции получения данных

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

 1query GetUser($id: ID!) {
 2  user(id: $id) {
 3    id
 4    name
 5    email
 6    posts {
 7      id
 8      title
 9      createdAt
10      comments {
11        id
12        text
13        author {
14          name
15        }
16      }
17    }
18  }
19}

Пример схемы GraphQL

 1type User {
 2  id: ID!
 3  name: String!
 4  email: String!
 5  posts: [Post!]!
 6}
 7
 8type Post {
 9  id: ID!
10  title: String!
11  content: String!
12  author: User!
13  comments: [Comment!]!
14  createdAt: DateTime!
15}
16
17type Query {
18  user(id: ID!): User
19  users: [User!]!
20  post(id: ID!): Post
21}
22
23type Mutation {
24  createUser(input: UserInput!): User!
25  updatePost(id: ID!, input: PostInput!): Post!
26}

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

  • Точные запросы — получение только нужных данных
  • Единая точка входа — один endpoint для всех операций
  • Строгая типизация — самодокументируемая схема
  • Эволюция API — безопасное добавление полей
  • Introspection — исследование схемы

GraphQL vs REST

  • Overfetching/Underfetching — GraphQL решает эти проблемы
  • Версионирование — GraphQL избегает версий API
  • Кеширование — REST проще кешировать
  • Сложность — REST проще для простых случаев

Популярные инструменты

  • Apollo Server — GraphQL сервер
  • Apollo Client — клиент для React
  • Relay — Facebook GraphQL клиент
  • GraphiQL — инструмент для исследования API

FAQ

Стоит ли заменять REST на GraphQL?

GraphQL отлично подходит для сложных приложений с различными клиентами, но REST может быть проще для простых API.