Теория 📔
May 9, 2023

📝 Принципы REST-API

Весьма часто задаваемый вопрос на собеседованиях. Объясняю:

REST-API (Representational State Transfer) - это архитектурный стиль для построения веб-сервисов, основанный на использовании протокола HTTP и форматов данных, таких как JSON или XML. Набор стандартов, которые должны соблюдаться при разработке веб-сервисов для обеспечения их эффективной и надежной работы.

Основные принципы REST-API:

  1. Клиент-серверная архитектура. REST-API должен быть построен на базе клиент-серверной архитектуры, где клиент отправляет запросы на сервер, а сервер отвечает на эти запросы.
  2. Без состояния. REST-API не должен сохранять состояние между запросами клиента. Каждый запрос должен содержать всю необходимую информацию для его выполнения.
  3. Кэширование. REST-API должен поддерживать кэширование ответов на запросы для уменьшения нагрузки на сервер(может привести к проблемам согласованности данных, например, в случаях, когда несколько клиентов работают с одним и тем же ресурсом).
  4. Единообразный интерфейс. REST-API должен иметь единообразный интерфейс для всех ресурсов. Это позволяет упростить клиентскую логику и повысить гибкость серверной реализации.
  5. Слои. REST-API должен быть построен с использованием слоев, где каждый слой может выполнять определенные функции, например, кэширование или безопасность.
  6. Операции с ресурсами через HTTP-методы. REST-API должен использовать HTTP-методы (GET, POST, PUT, DELETE) для операций с ресурсами.
  7. Поддержка форматов данных. REST-API должен поддерживать различные форматы данных, такие как JSON, XML и другие.

Проблемы кэширования

Я считаю кэширование данных очень опасной вещью, так как можно получить:

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

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

Слои в REST-API

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

  1. Уровень представления (Presentation Layer) - это слой, который отвечает за преобразование данных в формат, понятный клиентским приложениям. Этот слой может включать в себя форматы данных, такие как JSON, XML или HTML.
  2. Уровень приложения (Application Layer) - это слой, который содержит бизнес-логику приложения. Здесь происходит обработка запросов и формирование ответов. Здесь же могут находиться сервисы и компоненты, которые используются для работы с базами данных и другими ресурсами.
  3. Уровень данных (Data Layer) - это слой, который содержит данные, используемые приложением. Это могут быть базы данных, файловые системы, кэширование и другие ресурсы.
  4. Уровень связи (Communication Layer) - это слой, который отвечает за передачу данных между клиентским приложением и сервером. Этот слой может включать в себя протоколы передачи данных, такие как HTTP, TCP или WebSocket.

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

Заключение

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