Найти в Дзене
Аналитическая среда

Преимущества и недостатки RESTful API (часть 1)

Оглавление

Сегодня поговорим не просто о RESTful API, о чем написано огромное количество публикаций, а о преимуществах и ограничениях внедрения каждого из его принципов.

Немного контекста для погружения - "Что такое RESTful API?"

RESTful API (Representational State Transfer): архитектурный стиль взаимодействия компонентов приложения в сети.

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

Пробежимся по определениям:

  • Архитектурный стиль - это высокоуровневая стратегия организации системы, которая определяет общие правила взаимодействия между его компонентами (или разных систем);
  • Протокол - это набор правил и соглашений, которые определяют, как данные передаются между различными системами или компонентами одной системы; примеры протоколов - HTTP, SMTP, FTP, POP3 и другие.

Стиль RESTful API включает в себя 6 принципов:

  • Клиент-серверная архитектура
  • Отсутствие состояний (Stateless)
  • Кэширование
  • Единообразие интерфейса + HATEOAS
  • Слоистая архитектура (Layered system)
  • Код по требованию (Code on done )

каждый из которых имеет свою область применения, а также преимущества и недостатки. О них и поговорим дальше.

1. Клиент-серверная архитектура

Взаимодействие программ построено на разделении ролей: клиент (запрашивает данные) и сервер (предоставляет данные).

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

Область применения:

(практически везде, так как сам API предполагает разделение ролей участников на клиент и сервер)

  • интеграция со сторонними сервисами
  • web-приложения и сайты (взаимодействие back-end и front-end)
  • мобильные приложения (взаимодействие приложения с сервером)

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

  1. Упрощает построение взаимодействия, так как каждый из участников взаимодействия (клиент - сервер) может быть перенесен на другое решение или платформу без внесения изменения в работу второго участника.
  2. Масштабируемость: можно добавить серверы для обработки большего числа запросов; реализуется за счет использования промежуточных устройства (балансировщик, маршрутизатор нагрузки и аналогичные), которые по встроенной логике управляют пересылкой полученных от клиентов сообщений на сервера. Таким образом при необходимости масштабирования решения по причине увеличения нагрузки (больше клиентских запросов), достаточно подключить к балансировщику дополнительные сервера без дополнительной настройки на стороне клиентов.
  3. Упрощение технической поддержки за счёт возможности отключения любого из серверов без потери сервиса; преимущество проистекает из схемы подключения с использованием промежуточного устройства (балансировщик) при котором можно безболезненно вывести из эксплуатации любой сервер, в этом случае балансировщик будет распределять новые клиентские запросы между оставшимися серверами и не потребуется вносить изменения в работу клиентов.

Недостатки:

  1. Сложность реализации функционала кэширования, так как запросы одного клиента, при распределении клиентских запросов между серверами с помощью балансировщика нагрузки, перебрасываются на разные сервера и нужно учитывать их суммарное состояние, что отчасти будет противоречить принципу "отсутствие состояний (Stateless)".
  2. Увеличение сетевой нагрузки при распределении клиентских запросов через балансировщик - запросы со всей информацией, необходимой для выполнения запросы, сначала передаются от клиента на балансировщик, после от балансировщика на сервер и после обработки ответ также пересылается по цепочке.
Больше другой полезной информации в ТГ канале: https://t.me/all_for_analyse

2. Отсутствие состояний (Stateless)

Каждый запрос от клиента к серверу обрабатывается независимо от предыдущих запросов. Сервер не хранит информацию о предыдущих запросах клиента. Клиент передает в запросе всю необходимую для обработки запроса информацию.

Область применения:

a) построение решений на микросервисной архитектуре;b) интернет - сервисы (торговля)

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

  1. Масштабируемость: можно добавить серверы для обработки большего числа запросов, так как серверу не нужно «помнить» историю запросов клиента. Преимущество реализуется через использование промежуточных устройства (балансировщик, маршрутизатор нагрузки и аналогичные), которые по встроенной логике управляют пересылкой полученных от клиентов сообщений на сервера. В этом случае после добавления нового сервера, он может обрабатывать клиентские запросы, не "зная" историю предыдущих запросов клиента.
  2. Уменьшение времени обработки запроса, так как серверу не требуется сохранять и загружать историю запросов клиентов.
  3. Упрощение технической поддержки: любой сервер можно отключить без потери сервиса. Преимущество проистекает из схемы подключения с использованием промежуточного устройства (балансировщик) при котором можно безболезненно вывести из эксплуатации любой сервер, в этом случае балансировщик будет распределять новые клиентские запросы между оставшимися серверами, которым не требуется хранить историю предыдущих запросов клиентов.

Недостатки:

  1. Увеличение объема передаваемых данных, так как клиенту в запросе серверу требуется передать всю необходимую для обработки запроса информацию.
  2. Сложность с поддержкой целостности транзакций, в которых вызов следующей операции зависит от результатов предыдущей, а значит статус выполнения должен сохраняться на стороне клиента.
Больше другой полезной информации в ТГ канале: https://t.me/all_for_analyse

3. Кэширование

Ответы сервера могут кэшироваться (временно сохраняться), чтобы снизить нагрузку на сервер и ускорить загрузку данных. Кэширование может быть реализовано на стороне клиента, сервера или дополнительных промежуточных устройств.Где применяется:a) в любых решениях с учетом описанных недостатков, но в первую очередь в системах со статическими или редко изменяемыми данными

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

  1. Уменьшение нагрузки на сервер, так как кэшированная информация сохраняется отдельно
  2. Сокращение времени ответа, так как серверу не требуется обрабатывать запрос, данные подтягиваются из кэша
  3. Общее уменьшение нагрузки на систему за счёт сокращения числа обращений к другим системам для получения данных, необходимых для обработки запроса

Недостатки:

  1. Сложность реализации кэша по причине его зависимость от прав доступа у клиента (например, если это дополнительные данные, передаваемые в составе HATEOAS), а также настройки избирательности хранимых данных
  2. Необходимость дополнительного контроля валидности данных в кэше с целью их удаления в момент устаревания

Продолжение статьи Преимущества и недостатки RESTful API (часть 2)

Дополнительные материалы по теме статьи: