REST, аббревиатура от Representational State Transfer, переводится как «передача репрезентативного состояния». Это архитектурный стиль, описывающий взаимодействие компонентов приложения в сети. Представляя собой набор правил для создания API, REST позволяет программам общаться друг с другом, определяя, что можно запросить, какой получить ответ и куда отправлять данные. Сочетание REST и API образует REST API. Цель REST – обеспечение удобства и единообразия взаимодействия с API.
Основные принципы REST
Основные принципы REST:
Клиент-серверная модель (Client-Server)
Этот принцип определяет участников взаимодействия. Клиент инициирует запрос (компьютер, сервер, программа, браузер и т.д.), а сервер принимает запрос, обрабатывает его и отправляет ответ с данными (ресурсами). Ресурсы – это данные (текст, картинка, аудио, видео, HTML-документ, JSON и т.п.), имеющие уникальный идентификатор (URL). Над ресурсами выполняются операции CRUD: Create, Read, Update, Delete (создание, чтение, обновление, удаление). Клиент и сервер независимы и создаются отдельно. Изменение сервера не влияет на клиента, пока формат запросов и ответов остается прежним.
Отсутствие состояния (Stateless)
Сервер не хранит информацию о предыдущих запросах клиента. Каждый запрос должен содержать всю необходимую информацию. Например, переход на десятую страницу каталога (catalog/phones?page=10) требует отдельного запроса, а возврат на предыдущую – запроса на девятую страницу (catalog/phones?page=9). Браузеры хранят историю запросов, имитируя ощущение непрерывности. Этот принцип повышает масштабируемость сервера. Некоторая информация может храниться на клиенте или промежуточных серверах.
Кеширование (Caching)
Для разгрузки сервера используются промежуточные хранилища (кэш). Например, браузер может сохранить картинку на некоторое время, чтобы не запрашивать её повторно, если она не изменилась.
Многоуровневость системы (Layered System)
Сервер может состоять из множества серверов (прокси, балансировщики нагрузки). Каждый сервер взаимодействует только с ближайшими, не зная полного пути запроса. Клиент также не знает о промежуточных серверах.
Единство интерфейса (Uniform Interface)
Клиент и сервер используют общий язык для общения. Основные аспекты:
- Уникальные идентификаторы URL: каждый ресурс имеет уникальный адрес.
- Информация о действии в запросе: запрос содержит информацию о необходимом действии (например, создание поста в блоге требует отправки всех данных о посте). Изменения сущности осуществляются путем отправки всей обновленной информации.
- Самодостаточные сообщения: ответ содержит всю информацию для обработки клиентом.
- Гиперссылки: ответы могут содержать ссылки на связанные ресурсы.
Если API соответствует всем этим принципам, оно называется RESTful API.
Работа REST API с протоколом HTTP
REST API обычно реализуются с помощью HTTP. Пример: заказ товара в интернет-магазине.
- Запрос: браузер отправляет HTTP-сообщение на сервер (например, merion-shop.ru/order). Запрос содержит метод (например, POST для создания заказа), заголовки (служебная информация, авторизация) и тело сообщения (данные в формате JSON, например, почта и адрес доставки).
- Ответ: сервер возвращает ответ с заголовками, телом (например, ID заказа) и трехзначным кодом состояния.
Статус-коды:
- 1xx (информационные): например, 101 (инициализация вебсокетного соединения).
- 2xx (успешное выполнение): 200 OK (все ОК), 201 Created (ресурс создан), 204 No Content (успех, данных нет).
- 3xx (редиректы): 307 Temporary Redirect, 308 Permanent Redirect.
- 4xx (ошибки клиента): 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 429 Too Many Requests.
- 5xx (ошибки сервера): 500 Internal Server Error, 503 Service Unavailable, 504 Gateway Timeout.
В примере с заказом:
- GET (получение данных) используется для просмотра корзины (возвращает 200 OK с данными корзины). Параметры передаются в Path Parameters (например, merion-shop.ru/catalog/<category_id>) или Query Parameters (например, merion-shop.ru/search?query=iphone&limit=10).
- PUT (обновление) используется для изменения адреса заказа (merion-shop.ru/order/12345/, возвращает 200 или 204).
- DELETE (удаление) используется для отмены заказа (merion-shop.ru/order/12345/, возвращает 200 или 204).
Другие методы, такие как PATCH и HEAD, используются реже.
Ограничения REST
REST – рекомендации, а не строгие правила. Отклонение от принципов REST может привести к проблемам. Существуют ситуации, где REST нецелесообразен.
REST – важная часть веб-разработки, обеспечивающая удобство и единообразие в создании и использовании веб-сервисов. Понимание принципов REST необходимо для эффективной работы с API.