12 декабря 2020

🛠 Хватит использовать REST для API!

Frontend-разработчик в Foquz. https://www.cat-in-web.ru/
Технологии прогрессируют быстро и даже для лучших из них появляются альтернативы. Разбираем преимущества и недостатки REST и GraphQL, чтобы выбрать лучший вариант.
🛠 Хватит использовать REST для API!

REST – широко распространенная технология передачи данных по протоколу HTTP, которая до недавнего времени была де-факто стандартом веб-разработки. Однако развитие интернета не стоит на месте и у старичка появился конкурент – GraphQL. В этой статье мы рассмотрим преимущества и ограничения обеих технологий: попробуем решить, какую же из них выбрать.

Что такое REST?

REST (Representational State Transfer) – это стиль проектирования API, буквально обозначающий передачу состояния представления. Веб-службы REST используют для передачи и получения информации предопределенный набор операций, включая GET, POST, PUT и DELETE, и не сохраняют состояние приложения.

Основная идея REST очень проста – на URL-адрес ресурса отправляется запрос определенного типа и формата, на который приходит ответ с нужными данными (обычно в формате JSON).

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

  1. Масштабируемость. Так как архитектура REST разделяет клиент и сервер, ее легко расширять, что позволяет масштабировать приложение без особых проблем.
  2. Гибкость. Кроме того, эта архитектура весьма гибкая и дает возможность обрабатывать различные типы запросов и форматы данных.

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

  1. Чрезмерная выборка. Зачастую конечная точка API предоставляет на запрос лишнюю информацию, которая не требуется клиенту для совершения действий. Например, вы хотите получить только имя пользователя, но метод сообщает вам еще его возраст, телефон и электронную почту.
  2. Недостаточная выборка. Возможна и обратная ситуация, когда клиенту приходится делать несколько запросов, чтобы получить всю информацию, которая ему нужна. Например, из одной конечной точки API вы получаете личные данные пользователя, а из другой – информацию о сделанных им заказах.

Что такое GraphQL?

GraphQL использует другой стиль проектирования API – все рассматривается как граф, в котором данные взаимосвязаны. Это означает, что запрос можно настроить таким образом, чтобы из одной конечной точки получить всю необходимую информацию – и ничего больше. Таким образом можно даже объединять в одном запросе разные сущности.

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

  1. Все нужное и ничего лишнего. В GraphQL вы получаете только то, что просите, и больше ничего.
  2. Быстрая разработка на клиенте. Если нужно изменить что-то в данных, достаточно лишь немного подправить запрос. Это позволяет быстрее развивать продукт. Клиентскую и серверную разработку можно вести независимо друг от друга, при условии, что обе команды знают структуру данных.

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

  1. Сложность. Для небольших простых приложений настройка таких запросов может показаться слишком сложной и ненужной. В этой ситуации легко можно обойтись классическим REST-подходом.
  2. Нет кеширования. GraphQL использует всего одну конечную точку, что не позволяет следовать спецификации HTTP-кеширования. Это очень важно, так как кеширование уменьшает объем трафика.
🛠 Хватит использовать REST для API!

Простой пример для сравнения

Предположим, что мы разрабатываем профиль пользователя с лентой его сообщений и списком подписчиков. Для этого нужно получить информацию о пользователе (как минимум его имя), посты этого автора, а также массив его подписчиков.

REST-реализация

Если мы используем архитектуру REST, то придется сделать несколько запросов (2-3):

  1. /user/<id> – для получения сведений о пользователе.
  2. /user/<id>/posts – для получения списка сообщений, опубликованных этим пользователем.
  3. /user/<id>/followers – для получения списка подписчиков.

Скорее всего полученные в каждом случае данные будут избыточны. Например, в первом запросе кроме имени мы получим еще много ненужной информации о пользователе.

GraphQL-реализация

Здесь и проявляется вся мощь GraphQL.

В запросе мы можем указать точный набор нужных данных, например, вот так:

        query {
  User(id: '123') {
    name
    posts {
      title
    }
    followers {
      name
    }
  }
}
    

И в ответ получим именно то, чего ожидаем. Очень просто и чисто.

GraphQL vs REST

Пора подвести итог противостояния. Для этого сравним оба стиля по основным параметрам:

1. Получение данных

У REST есть проблемы с комплектацией: получаемые из конечной точки данные часто бывают избыточными или неполными. У GraphQL этого недостатка нет.

2. Структура ответа

В REST-архитектуре структуру ответа определяет сервер, а в GraphQL – клиентский код.

3. Автоматическое кэширование

REST использует кэширование ответов по умолчанию, в то время как GraphQL не имеет системы автоматического кэширования. Однако существуют различные клиенты GraphQL (Apollo, Relay), которые предоставляют эту возможность.

4. Обработка ошибок

В REST обработка ошибок намного проще. GraphQL обычно возвращает статус 200 OK даже с ошибкой, но при использовании специальных клиентов эта проблема легко решается.

***

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

Источники

А что выбираете вы?

ВАКАНСИИ

Добавить вакансию
Разработчик C++
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ