Что такое REST
В этой статье разберем, в чем особенности этого архитектурного стиля и как он поможет помочь при безопасной разработке.
Representational State Transfer — архитектурный стиль программирования для распределенных систем, в частности для веб-сервисов и веб-API. Концепцию REST ввёл Рой Филдинг в его диссертации в 2000 году. REST описывает ряд принципов и ограничений, которые делают веб-сервисы проще, легче и более масштабируемыми.
Какие у REST принципы
Безсостояние (Statelessness). Каждый запрос от клиента к серверу должен содержать всю необходимую информацию для обработки запроса. Сервер не должен сохранять контекст клиента между запросами.
Единообразие интерфейса (Uniform Interface). Rдиный интерфейс между клиентом и сервером упрощает и декапсулирует архитектуру сервиса. Это облегчает взаимодействие клиента с сервером.
Кеширование (Cacheability). Ответы сервера должны быть неявно или явно помечены как кэшируемые или нет. Кеширование может уменьшить время отзыва и повысить производительность системы.
Клиент-серверная архитектура (Client-Server). Это разделение интересов подразумевает, что, например, пользовательский интерфейс размещен на клиентской стороне, а управление данными — на серверной. Такое разделение упрощает разработку и масштабирование.
Многоуровневая система (Layered System). Клиент, который заходит на RESTful веб-сервис, не может знать, непосредственно общается он с конечным сервером, или с промежуточным уровнем (например, прокси сервером или балансировщиком нагрузки).
Код по требованию (optional). Серверы могут временно расширять или настраивать функционал клиента, передавая ему исполняемый код, например, скрипты. Этот принцип является необязательным.
В контексте веб-API, RESTful сервисы предполагают использование стандартных HTTP-методов (GET, POST, PUT, DELETE и т.д.) для выполнения операций над ресурсами, которые идентифицируются посредством URI.
Например, в RESTful API для ведения блога, URI может представлять конкретную статью, а HTTP-методы могут использоваться для чтения (GET), создания (POST), изменения (PUT) или удаления (DELETE) этой статьи.
Зачем нужен этот архитектурный стиль
REST для веб-API — это хорошее решение многих задач разработки веб-сервисов, которые дают интерактивность, эффективность и доступность на различных платформах и устройствах. Давайте чуть подробнее о плюсах:
Разграничение клиентской и серверной сторон упрощает расширение систем.
Использование стандартных HTTP-методов позволяет легко взаимодействовать с ресурсами API на разных платформах.
API и клиенты могут разрабатываться параллельно и на разных языках программирования.
REST облегчает подключение различных сервисов и сторонних систем благодаря четко определенным интерфейсам.
Многоуровневая архитектура скрывает внутренности системы и облегчает контроль доступа.
Что REST даёт для кибербезопасности
Есть несколько опосредованных вещей, которые важны для контекста ИБ. И хотя REST сам по себе не решает все задачи безопасности, аспекты дизайна могут помочь создать более безопасную среду для обработки данных и взаимодействия приложений.
Здесь используют понятный и универсальный набора HTTP операций (GET, POST, PUT, DELETE). Это упрощает более строгий контроль доступа и проведение аудита безопасности взаимодействий с веб-сервисами.
В каждом запросе передается вся необходимая информация, что определяет отсутствие необходимости хранения сведений о состоянии пользователя на сервере. Это снижает риск утечки пользовательских данных при возможной атаке на сервер.
Строгая структура ресурсов и URL позволяет точно определить, какие операции допустимы, что упрощает реализацию политик безопасности и управление доступом.
Поскольку ответы от сервера могут быть кешированы, это снижает количество прямых запросов к серверу, ограничивая таким образом векторы атак и снижая риск DoS-атак.
Клиенты общаются с API, не зная о структуре ведущей системы, что затрудняет потенциальным злоумышленникам выполнение целенаправленных атак на конкретные компоненты системы.
REST часто использует HTTPS, который предоставляет шифрование и аутентификацию данных, повышая тем самым общую безопасность взаимодействий между клиентом и сервером.
Last updated