REST API
Способ, которым программы обмениваются данными по HTTP: каждый объект доступен по своему адресу, а действия задаются методами GET, POST, PUT, DELETE.
API (Application Programming Interface) — договор о том, как одна программа обращается к другой. REST API — самый распространенный стиль таких договоров в вебе. Данные представлены как ресурсы со своими адресами — заказы, клиенты, платежи, — а действия с ними выполняются стандартными методами протокола HTTP. Мобильное приложение банка, личный кабинет на сайте и интеграция двух учетных систем чаще всего общаются именно так.
Принципы REST сформулировал Рой Филдинг в своей диссертации в 2000 году.
Ресурсы и методы
| Запрос | Что делает |
|---|---|
GET /orders |
Получить список заказов |
GET /orders/42 |
Получить заказ № 42 |
POST /orders |
Создать новый заказ |
PUT /orders/42 |
Заменить заказ № 42 целиком |
PATCH /orders/42 |
Изменить отдельные поля заказа |
DELETE /orders/42 |
Удалить заказ |
Как выглядит обмен
curl -H "Authorization: Bearer <token>" https://api.example.ru/orders/42
Ответ приходит обычно в формате JSON вместе с кодом состояния: 200 — успешно, 201 — создано, 400 — ошибка в запросе, 401 — нужна авторизация, 404 — не найдено, 500 — ошибка на сервере.
{ "id": 42, "status": "paid", "amount": 15000 }
Принципы REST
- Без состояния (stateless). Каждый запрос содержит все нужное для его обработки, сервер не помнит предыдущие. Поэтому серверы легко масштабировать за балансировщиком нагрузки.
- Единообразие. Одни и те же методы и коды ответов для всех ресурсов.
- Кэширование. Ответы на GET-запросы можно сохранять и переиспользовать.
- Идемпотентность. Повтор GET, PUT или DELETE дает тот же результат, поэтому их безопасно повторять при сбое сети. POST — нет: повтор может создать второй заказ, и от этого защищаются ключами идемпотентности.
Безопасность
Доступ к API выдают по токенам — часто это JWT, полученные по протоколу OAuth 2.0. Запросы между системами дополнительно подписывают с помощью HMAC, а весь обмен идет по защищенному каналу TLS.
Документация и версии
Хороший API описан в спецификации OpenAPI (Swagger): по ней генерируют документацию и клиентский код. Изменения, ломающие совместимость, выпускают в новой версии (/v2/orders), чтобы старые клиенты продолжали работать. Проектирование и поддержка API — основа интеграций в разработке информационных систем. Альтернатива для сложных интерфейсов — GraphQL, где клиент сам выбирает нужные поля.