Клиент-серверная архитектура: Четкое разделение обязанностей между клиентом, запрашивающим ресурсы, и сервером, предоставляющим их.
Отсутствие состояния (Stateless): Каждый запрос от клиента к серверу должен содержать всю необходимую информацию для понимания и обработки запроса. Сервер не хранит информацию о предыдущих запросах клиента.
Кэшируемость (Cacheable): Ответы от сервера могут быть помечены как кэшируемые или некэшируемые, что позволяет клиентам переиспользовать полученные ответы для повышения производительности.
Единообразный интерфейс (Uniform Interface): Четыре ограничения:
Идентификация ресурсов (Identification of resources): Ресурсы идентифицируются с помощью URI.
Манипуляции ресурсами через представления (Manipulation of resources through representations): Клиент взаимодействует с ресурсом через передачу представлений ресурса.
Самоописывающиеся сообщения (Self-descriptive messages): Каждое сообщение содержит достаточно информации, чтобы понять, как его обработать (например, тип содержимого).
HATEOAS (Hypermedia as the Engine of Application State): Клиент переходит между ресурсами, следуя ссылкам в ответах сервера.
Многоуровневая система (Layered System): Архитектура позволяет использовать промежуточные слои (например, прокси-серверы, шлюзы) между клиентом и сервером, не влияя на их взаимодействие.
Код по требованию (Code on Demand - Optional): Сервер может временно расширять или настраивать функциональность клиента, передавая исполняемый код (например, JavaScript). Является необязательным правилом.