Sobes.tech
Middle
138
questionbank

Какие существуют принципы REST?

Answer from AI

sobes.tech AI

Существуют следующие принципы REST:

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