Что такое 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
