REST: Стиль взаимодействия компонентов распределённого приложения
REST (Representational State Transfer) — архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Задает набор правил и ограничений для построения программных интерфейсов: от принципов их структуры до поддерживаемых возможностей.
Термин введён Роем Филдингом, одним из создателей протокола HTTP, в 2000 году. Для веб-служб, построенных с учётом REST, применяют термин «RESTful».
Особенности:
- Сервер предоставляет ресурсы в виде данных, а клиент получает к ним доступ с помощью стандартных HTTP-запросов.
- Каждый ресурс имеет уникальный идентификатор (URI).
- Архитектура REST не привязана к конкретным технологиям и протоколам, но построение RESTful API почти всегда подразумевает использование методов HTTP и распространённых форматов представления данных, например JSON или XML.
Принципы
Некоторые принципы REST:
- Клиент-серверная архитектура. Клиент запрашивает данные, а сервер их предоставляет. Такое разделение улучшает масштабируемость системы и позволяет клиентам работать независимо от серверной логики.
- Отсутствие состояния (stateless). Каждый запрос от клиента к серверу обрабатывается независимо от предыдущих запросов. Сервер не хранит информацию о состоянии клиента, что упрощает обработку запросов и повышает отказоустойчивость системы.
- Кеширование. Ответы сервера могут кешироваться, чтобы снизить нагрузку на сервер и ускорить загрузку данных. REST API поддерживает механизмы кеширования, такие как HTTP-заголовки Cache-Control и ETag, которые позволяют клиентам повторно использовать ранее полученные данные.
- Единообразие интерфейса. Все ресурсы REST API должны иметь чёткую структуру и единообразные URL-адреса. Запросы к API выполняются с использованием стандартных методов HTTP, а данные передаются в предсказуемых форматах, таких как JSON или XML.
- Система уровней (Layered System). REST API может включать несколько уровней, таких как балансировщики нагрузки, прокси-серверы и системы аутентификации. Каждый уровень выполняет свою функцию и не зависит от других, что повышает надёжность и гибкость системы.
- Возможность выполнения кода по требованию. Хотя этот принцип не является обязательным, REST API может поддерживать загрузку и выполнение кода на стороне клиента, например в виде скриптов или небольших программ.
Методы
Для взаимодействия с ресурсами в REST API используются стандартные методы HTTP, например:
- GET — получение данных о ресурсе.
- POST — создание нового ресурса.
- PUT — обновление существующего ресурса.
- PATCH — частичное изменение ресурса.
- DELETE — удаление ресурса.
Реже используются методы HEAD (для получения заголовка объекта или ресурса) и OPTIONS (возвращает список доступных методов).
Безопасность
При реализации REST API важно учитывать меры безопасности, так как API часто предоставляют доступ к конфиденциальным данным. Некоторые рекомендации:
- Аутентификация и авторизация. Использовать механизмы строгой аутентификации (например, OAuth 2.0, JWT) для контроля доступа к API и корректной реализации правил авторизации.
- Шифрование. Шифровать конфиденциальные данные как при передаче (HTTPS), так и при хранении.
- Контроль доступа. Внедрять механизмы контроля доступа, чтобы только авторизованные пользователи могли получать доступ к ресурсам или изменять их.
- Проверка ввода. Проверять вводимые пользователем данные и ответы API перед их обработкой, чтобы избежать угроз безопасности, таких как атаки путём внедрения или межсайтовый скриптинг (XSS).
Тестирование
Для тестирования REST API используются, например:
- Postman — позволяет создавать, отправлять и тестировать HTTP-запросы и получать ответы от API.
- SoapUI — позволяет тестировать и отлаживать REST API: создавать и отправлять запросы, автоматизировать тестирование, генерировать тестовые отчёты.
- JMeter — позволяет отправлять HTTP-запросы и проводить нагрузочное тестирование, чтобы проверить, как API справляется с высокими нагрузками.
- REST-assured — Java-библиотека для тестирования REST API с использованием DSL-синтаксиса.