Расскажу об интересных понятиях, которые вам могут пригодиться в… — Ilya Lisov - Java Backend — TG.ME

Расскажу об интересных понятиях, которые вам могут пригодиться в разработке и на собеседования

RESTFUL-принципы:
1) Client-Server. Этот принцип обозначает, что ваша система имеет и клиента (который отправляет запросы и получает ответы) и сервер (который получает запросы и отправляет ответы). Например, P2P-сети и Pub/Sub-модели не являются client-server моделями.
2) Stateless Server. Этот принцип заключается в том, что сервер не хранит информацию о конкретном запросе, а получает весь необходимый контекст только из запроса. Это необходимо для масштабирования приложений и для предсказуемости сервера.
3) Cacheable. Этот принцип обозначает то, что ответ должен явно или неявно помечать себя как кэшируемый или нет, чтобы клиент мог переиспользовать ответ в течение какого-то времени. Это достигается директивами Cache-Control и Expires в хэдере ответа.
4) Uniform Interface. Этот принцип обеспечивает прозрачность и предсказуемость API. Он включает в себя уникальную идентификацию ресурса (уникальный путь к каждому ресурсу), репрезентацию ресурса для его изменения (сервер возвращает ресурс в каком-то виде), самоописывающиеся сообщения (каждый ответ сервера должен рассказывать какие действия с ресурсом можно произвести), HATEOAS (сервер включает в ответ доступные методы для изменения состояния полученного ресурса)
5) Layered System. Этот принцип отвечает за то, что клиент не может узнать что стоит за сервером, к которому он обращается. Это используется в proxy, load balancer.
6) Code-on-demand (Опциональный). Этот принцип позволяет серверу отправлять сниппеты кода, которые он может использовать. Это позволяет не реализовывать абсолютно всю функциональность на клиенте без необходимости.

Richardson Maturity Model (Модель зрелости Ричардсона)
Эта модель помогает оценить насколько архитектура соответствует REST-принципам. Существует 4 уровня:
0 - Один эндпоинт, зачастую один метод POST, запросы отличаются телом. Это напоминает GraphQL.
1 - Идентификация ресурсов. CRUD операции не разделены, но используются уникальные идентификаторы ресурсов.
2 - HTTP-методы и коды ответов. Реализованы подходящие HTTP-методы и коды ответов.
3 - HATEOAS. В ответ включено поле _links, в котором перечислены доступные для этого ресурса методы.

Вот пример для 3 уровня RMM:
{
"id": 12,
"name": "Anna",
"_links": {
"self": { "href": "/users/12" },
"orders": { "href": "/users/12/orders" }
}
}
December 4, 2025 475 6