REST

REST (Representational State Transfer) — архитектурный стиль от Roy Fielding (диссертация 2000 г.). Про использование HTTP по-настоящему: ресурсы, методы, коды, гипермедиа. Большинство "REST API" в реальности — не REST, а RPC поверх HTTP.

6 принципов Филдинга

  1. Client-Server — разделение UI и данных
  2. Stateless — каждый запрос содержит всё необходимое
  3. Cacheable — ответы могут кешироваться
  4. Uniform Interface — единый интерфейс: URI + методы + типы
  5. Layered System — прокси, CDN прозрачны
  6. Code on Demand (опционально) — сервер может отдать JS

Уровни зрелости Ричардсона

УровеньЧто
0один URL, один метод (POST) — RPC-стиль
1ресурсы (много URL), но всё POST
2ресурсы + HTTP-методы + статусы. Большинство "REST".
3+ HATEOAS (ссылки в ответах). Настоящий REST.

Типовой ресурсный дизайн

GET    /articles           список
POST   /articles           создать
GET    /articles/42        один
PUT    /articles/42        заменить
PATCH  /articles/42        обновить
DELETE /articles/42        удалить

GET    /articles/42/comments      подколлекция
POST   /articles/42/comments      добавить коммент

HATEOAS

В ответе — ссылки на возможные действия. Клиент не должен знать URL-схему заранее.

{
  "id": 42,
  "title": "Hello",
  "_links": {
    "self":     { "href": "/articles/42" },
    "comments": { "href": "/articles/42/comments" },
    "publish":  { "href": "/articles/42/publish", "method": "POST" }
  }
}

HATEOAS почти никто не делает. GraphQL, JSON:API, HAL — попытки решить.

Спецификации

REST vs GraphQL vs gRPC

RESTGraphQLgRPC
ТранспортHTTP 1/2HTTPHTTP/2
Кешированиепростое (HTTP)сложноесложное
Over/under-fetchingчасторешеночастично
СхемаOpenAPISDL, интроспекция.proto
Для чегопубличные APIсложный UIмикросервисы

См. также

← на главную