Назад к вопросам
Middle+
74
questionbank

Расскажи о правиле единообразного интерфейса (Uniform Interface).

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Правило Uniform Interface — одно из шести архитектурных ограничений REST. Оно предписывает системе использовать единый, стандартизированный подход к взаимодействию между клиентом и сервером. Это упрощает и отделяет архитектуру, улучшает видимость и облегчает независимое развитие клиента и сервера.

Компоненты Uniform Interface:

  1. Идентификация ресурсов (Identification of resources): Ресурсы должны быть уникально идентифицируемы (обычно через URI). Это основа для стандартизованного взаимодействия. Пример: /users/123, /products/ABC.
  2. Манипулирование ресурсами через их представления (Manipulation of resources through representations): Клиент получает представление ресурса (например, в JSON или XML формате), которое содержит достаточно информации для изменения или удаления ресурса на сервере. Состояние ресурса на сервере можно изменить, отправив измененное представление.
  3. Самоописуемые сообщения (Self-descriptive messages): Каждое сообщение (запрос или ответ) должно содержать достаточно информации, чтобы быть полностью понятым без контекста состояния сервера или других запросов. Это включает метаданные: тип контента, информацию о кэшировании, ссылки на другие ресурсы и т.д.
    HTTP/1.1 200 OK
    Content-Type: application/json
    Cache-Control: max-age=3600
    
    {
      "name": "Example User",
      "links": [
        {
          "rel": "self",
          "href": "/users/123"
        }
      ]
    }
    
  4. Hypermedia as the Engine of Application State (HATEOAS): Позволяет клиенту динамически переходить между ресурсами, основываясь на гипермедийных ссылках, предоставленных сервером в ответе. Клиент не должен заранее знать все URI, кроме точки входа. Сервер направляет клиента по доступным действиям и ресурсам.
    {
      "orderId": "A123",
      "status": "processing",
      "links": [
        {
          "rel": "cancel",
          "href": "/orders/A123/cancel",
          "method": "POST"
        },
        {
          "rel": "self",
          "href": "/orders/A123"
        }
      ]
    }
    
    Вместо жестко закодированных путей, клиент узнает о возможности отмены заказа по наличию и содержанию ссылки с rel: "cancel".

Единообразный интерфейс критически важен для масштабируемости и эволюционируемости RESTful систем, так как он уменьшает связность между компонентами.