Что такое уровни зрелости REST API (модель Ричардсона)?

«Что такое уровни зрелости REST API (модель Ричардсона)?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Уровни зрелости REST (Richardson Maturity Model, RMM) — это модель, оценивающая, насколько веб-API соответствует архитектурным ограничениям REST. Она включает четыре уровня, от наименее к наиболее "RESTful".

Уровень Название Ключевая характеристика Пример HTTP-запроса
0 Swamp of POX (Болото POX) Использует HTTP только как транспортный протокол. Обычно один URI (например, /api) и один метод (чаще всего POST). POST /api с телом {"action": "getUser", "id": 123}
1 Resources (Ресурсы) Вводит понятие отдельных ресурсов (сущностей). Разные URI для разных сущностей. POST /users/123 (для получения данных)
2 HTTP Verbs (HTTP-глаголы) Использует HTTP-методы (GET, POST, PUT, DELETE) по их семантике и коды состояния HTTP. GET /users/123
3 Hypermedia Controls (Гипермедиа, HATEOAS) Ответы API содержат ссылки (links) на возможные следующие действия, что делает API самоописываемым. GET /users/123 возвращает данные пользователя со ссылками на его заказы.

Пример ответа уровня 3 (HATEOAS):

{
  "id": 123,
  "name": "John Doe",
  "email": "john@example.com",
  "_links": {
    "self": { "href": "/users/123" },
    "orders": { "href": "/users/123/orders" },
    "update": { "href": "/users/123", "method": "PUT" },
    "delete": { "href": "/users/123", "method": "DELETE" }
  }
}

Почему это важно? Уровни 2 и 3 обеспечивают лучшую предсказуемость, кэшируемость, масштабируемость и независимость клиента от конкретной структуры URI, что является ключевой целью REST.