Что такое архитектурный стиль REST?

Ответ

REST (Representational State Transfer) — это архитектурный стиль для построения распределенных веб-сервисов, использующий протокол HTTP как есть. Его ключевая идея — взаимодействие с ресурсами через их представления (например, JSON или XML) с помощью стандартных HTTP-методов.

Основные принципы REST:

  • Единообразие интерфейса (Uniform Interface): Использование стандартных HTTP-методов (GET, POST, PUT, DELETE, PATCH) для операций CRUD над ресурсами, идентифицируемыми уникальными URI.
  • Отсутствие состояния (Stateless): Каждый запрос от клиента должен содержать всю информацию, необходимую серверу для его обработки. Сервер не хранит состояние сессии клиента.
  • Кэшируемость (Cacheable): Ответы сервера должны явно указывать, можно ли их кэшировать, чтобы повысить производительность.
  • Клиент-серверная архитектура: Четкое разделение обязанностей.
  • Слоистая система (Layered System): Клиент не знает, взаимодействует ли он напрямую с конечным сервером или через промежуточные узлы (прокси, балансировщики).

Пример RESTful запроса и ответа:

GET /api/users/123 HTTP/1.1
Host: api.example.com
Accept: application/json
{
  "id": 123,
  "name": "Иван Иванов",
  "email": "ivan@example.com",
  "_links": {
    "self": { "href": "/api/users/123" },
    "orders": { "href": "/api/users/123/orders" }
  }
}

Почему это важно: REST обеспечивает простоту, масштабируемость и независимость клиента от сервера, что делает его стандартом для публичных API.

Ответ 18+ 🔞

Да ты посмотри, какой умный дяденька придумал! Сидит, блядь, наверное, в своём кабинете, чешет репу и думает: "А как бы так сделать, чтобы все эти раздолбайские программы друг с другом общались, как люди, а не как мартышки с гранатой?". И родилась, сука, идея — REST.

Это, понимаешь, не протокол, не библиотека какая-нибудь, а просто архитектурный стиль, типа как стиль в одежде. Только вместо косухи и кед — обычный-преобычный HTTP, который у всех и так уже есть. Вся суть — работать с ресурсами через их представления. То есть не лезть в базу напрямую, а говорить: "Эй, сервер, дай-ка мне представление пользователя номер 123 в формате JSON". И он тебе вывалит этот JSON, и живи с ним, делай что хочешь.

Основные принципы, на которых всё держится, как на трёх китах, только их пять:

  • Единообразие интерфейса (Uniform Interface): Это святое, блядь! Всё должно быть по полочкам. Есть у тебя ресурс — /api/users/123. Хочешь его получить — шлёшь GET. Хочешь создать нового — POST на /api/users. Обновить — PUT или PATCH. Удалить — DELETE. И никаких, сука, самодеятельностей вроде GET /api/deleteUser?id=123. Это пиздец и бардак.
  • Отсутствие состояния (Stateless): Сервер — не твоя мамка, чтобы помнить, кто ты такой и что ты в прошлый раз просил. Каждый твой запрос — как в первый раз. Всю нужную инфу (типа токена авторизации) ты должен таскать с собой в каждом запросе. Не принёс — пошёл нахуй, не узнали.
  • Кэшируемость (Cacheable): Чтобы серверу по сто раз на дню не отвечать на один и тот же идиотский вопрос "а сколько там пользователей?", он может в ответе написать: "Это, братан, можно закэшировать на 5 минут". И следующие пять минут все будут тыкать в этот кэш, а сервер — отдыхать. Гениально и просто.
  • Клиент-сервер: Чёткое разделение, как в хорошем ресторане. Клиент (приложение на телефоне, веб-страница) — это гость, он делает заказ. Сервер — это кухня, она его готовит. Они друг про друга почти ничего не знают и этим счастливы.
  • Слоистая система: Клиенту вообще похуй, с кем он разговаривает. Может, это сразу конечный сервер, а может — целая цепочка из проксей, балансировщиков и бог знает чего ещё. Главное — на выходе он получает то, что просил.

Вот смотри, как это выглядит в жизни, на примере:

Ты, такой весь из себя клиент, шлёшь запрос, простой, как три копейки:

GET /api/users/123 HTTP/1.1
Host: api.example.com
Accept: application/json

И тебе в ответ прилетает не какая-то хрень, а красивая, структурированная JSON'ка:

{
  "id": 123,
  "name": "Иван Иванов",
  "email": "ivan@example.com",
  "_links": {
    "self": { "href": "/api/users/123" },
    "orders": { "href": "/api/users/123/orders" }
  }
}

Видишь эти _links? Это, блядь, почти как гиперссылки в вебе — "а вот тут можешь про самого себя почитать подробнее, а вот тут — заказы этого пользователя глянуть". Удобно, ёпта!

А почему это, сука, так всех заебало и все используют? Да потому что просто, ёбушки-воробушки! Потому что масштабируется на овердохуища серверов. Потому что клиенту (тому, кто API использует) по большому счёту плевать, на каком языке и фреймворке этот сервер написан. Дал он тебе JSON по правилам — и всё, дальше сам разбирайся. Независимость, блядь, вот что ценно. Поэтому он и стал стандартом де-факто для публичных API — от мелких стартапов до гигантов вроде Гугла.