REST (Representational State Transfer) – это архитектурный стиль для построения распределенных систем, в частности веб-сервисов. Он определяет набор ограничений и принципов, которые помогают создавать масштабируемые, отказоустойчивые и легко поддерживаемые веб-сервисы.
Основные принципы REST:
- Клиент-серверная архитектура: Разделение ответственности между клиентом и сервером. Клиент запрашивает ресурсы, сервер отвечает на запросы.
- Отсутствие состояния (Stateless): Сервер не хранит информацию о состоянии клиента между запросами. Каждый запрос должен содержать всю необходимую информацию для его обработки.
- Кэширование: Клиенты или промежуточные узлы могут кэшировать ответы сервера.
- Единообразный интерфейс (Uniform Interface): Упрощает взаимодействие между клиентом и сервером за счет стандартизированных способов доступа к ресурсам:
- Идентификация ресурсов с помощью URI.
- Манипуляции ресурсами через представления (например, в формате JSON или XML).
- Самоописывающие сообщения.
- HATEOAS (Hypermedia as the Engine of Application State): Репрезентации ресурсов содержат ссылки на другие связанные ресурсы.
- Многоуровневая система (Layered System): Система может состоять из нескольких слоев (например, балансировщик нагрузки, кэш, сервер), каждый из которых не влияет на взаимодействие между клиентом и сервером.
- Код по запросу (Code on Demand, опционально): Сервер может передавать исполняемый код клиенту (например, JavaScript), который расширяет функциональность клиента.
Назначение REST:
- Упрощение интеграции: Обеспечивает стандартный способ взаимодействия между различными системами.
- Масштабируемость: Отсутствие состояния на сервере упрощает горизонтальное масштабирование.
- Производительность: Кэширование снижает нагрузку на сервер и сокращает время ответа.
- Надежность: Разделение на слои повышает отказоустойчивость.
- Портативность: Клиент может взаимодействовать с разными серверами, реализующими RESTful API.
REST используется для создания веб-APIs, которые позволяют приложениям (веб-сайтам, мобильным приложениям, другим сервисам) взаимодействовать друг с другом и получать доступ к данным и функциональности.