Перейти к содержанию

GraphQL

REST — бич современных технологий и почему человечество должно перейти на GraphQL

REST стал стандартом для проектрирования API, но его ограничения становятся все более очевидными в современных реалиях

Ограничения REST

1. Избыточность данных

Апи на ресте часто возвращает фиксированный набор данных, что приводит к избыточной передаче информации. Например, если у вас есть ресурс пользователя с полями id, name, email, address, gay_sex_counter, и вы хотите получить только name и email, вам все равно придется получать все поля:

GET /pussy_api/users/1

Ответ:

{
  "id": 1,
  "name": "Мерзость пишущая на ресте",
  "email": "virgin@restuser.gay",
  "address": "Most gays gay club",
  "gay_sex_conter": 134985
}

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

2. Множественные запросы

Рест требует выполнения нескольких запросов для получения связанных данных. Например, чтобы получить информацию о пользователе и его постах, вам нужно сделать два запроса:

GET /users/1
GET /users/1/posts

Это приводит к увеличению времени отклика и усложнению клиентской логики. В случае с GraphQL вы можете сделать один запрос:

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

И прямо таким скопом все это прокешировать. Очередная победа графобогов над рестоблядями.

3. Версионирование API

Ублюдский рест требует создания новых версий при изменении структуры данных. Например, если вы добавляете новое поле phone к пользователю, вам нужно создать новую версию API:

GET /v1/users/1
GET /v2/users/1

В GraphQL вы можете просто добавить новое поле в схему, и старые запросы продолжат работать без изменений. Что просто уничтожает такую проблему, как фрагментация апи.

Имиджанизируйте ебальник рестобляди, когда он поддерживает 5-10 версий апи, потому что пару полей поменял.

4. Уважение

Как только вы начинаете проект с рестом, вы сразу становитесь порицаемым в обществе. В общественном транспорте люди отсаживаются от вас, скорая просто игнорирует ваши звонки, и в целом все ваши друзья перестают вас куда-то звать и общаться с вами.

Как только вы переходите на богоподобный gql, вас окружают сотни самок, жаждущих вас. Вас везде уважают, вы становитесь самым желанными гостем в каждом доме и душой компании в любом кругу. Вы попадаете в клуб элит и получаете невероятную возможность насмехаться над РЕСТаплебееями.

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

Теперь посмотрим на величайший GraphQL и почему он жестко дает на ротан мерзкому ресту и его жалким последователям.

1. Запросы по требованию

GraphQL позволяет клиентам запрашивать только те данные, которые им нужны. Например, если вам нужны только name и email пользователя, вы можете сделать следующий запрос:

{
  user(id: "1") {
    name
    email
  }
}

Это значительно снижает объем передаваемых данных. Получаем только то что запрашиваем, а не имя, фамилию и пару половых членов за щеку.

2. Один запрос — множество ресурсов

Величайший GraphQL позволяет получать связанные данные за один запрос. Например, чтобы получить пользователя и его посты, вы можете использовать следующий запрос:

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

Это упрощает логику на стороне клиента и уменьшает количество запросов к серверу.

3. Гибкость и расширяемость

GraphQL позволяет легко добавлять новые поля и типы данных без необходимости создания новой версии API. Например, если вы хотите добавить поле phone к пользователю, вы просто обновляете схему:

type User {
  id: ID!
  name: String!
  email: String!
  phone: String
}

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

4. Интуитивно понятная документация

GraphQL предоставляет встроенную документацию через инструменты, такие как GraphiQL или Apollo Studio. Это позволяет разработчикам быстро ориентироваться в доступных типах и полях. Например, в GraphiQL вы можете увидеть все доступные типы и их поля, что упрощает процесс интеграции.

Бтв, есть конечно сваггер, но как же он отсасывает у graphiql, громко и слюняво

5. Поддержка подписок

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

subscription {
  postAdded(userId: "1") {
    title
    content
  }
}

Не надо дрочиться с отдельными сокетными соеденениями, просто делаем sub и кайфуем


billion_must