Знакомство с REST API: принципы. Часть 1.

Знакомство с REST API: принципы. Часть 1.
Просмотров (259)

RESTful API, или просто REST API, — это один из самых популярных архитектурных подходов для организации взаимодействия между клиентом и сервером.

RESTful API и REST API часто используются как обозначение одного и того же, но между ними есть небольшие различия.

REST API - это общее название для API, которое следует принципам REST.

RESTful API - API, которое полностью соответствуют всем принципам и ограничениям REST.

Архитектурные принципы REST

1. Клиент-серверная архитектура

Принцип: Клиент (например, приложение или браузер) и сервер (место, где хранятся и обрабатываются данные) отделены друг от друга и взаимодействуют через API. Клиент отправляет запросы, а сервер обрабатывает их и возвращает ответы.

Пример:

  • Браузер отправляет запрос GET /api/products/1, чтобы получить информацию о товаре с ID 1.
  • Сервер обрабатывает запрос и возвращает JSON с данными о товаре.

Преимущество: клиент и сервер могут развиваться независимо друг от друга, сохраняя совместимость.

2. Без состояния (Statelessness)

Принцип: Сервер не хранит состояние клиента между запросами. Каждый запрос должен содержать всю необходимую информацию для его выполнения.

Пример:

  • Пользователь делает первый запрос: GET /api/products/1, и получает данные.
  • Если пользователь делает второй запрос, например, для создания заказа, запрос POST /api/orders включает всю информацию о заказе (например, ID товара, количество) и, возможно, токен аутентификации.

Преимущество: каждый запрос обрабатывается независимо, что упрощает масштабирование сервера.

3. Кеширование (Cacheability)

Принцип: Ответы от сервера могут быть помечены как кешируемые, что позволяет клиенту временно хранить ответ и использовать его, не отправляя повторные запросы к серверу.

Пример:

  • Запрос на получение списка товаров GET /api/products может вернуть ответ с заголовком Cache-Control: max-age=3600.
  • Это значит, что клиент может повторно использовать этот ответ в течение одного часа (3600 секунд), не обращаясь к серверу.

Преимущество: кеширование снижает нагрузку на сервер и ускоряет работу клиента.

4. Единообразие интерфейса (Uniform Interface)

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

Пример:

  • Для доступа к товарам и пользователям API может иметь такие пути:
    
    GET /api/products - получение списка товаров
    GET /api/products/1 - получение конкретного товара
    GET /api/users - получение списка пользователей
    
  • Единообразие помогает быстро понять структуру API и избежать ошибок.

Преимущество: упрощает использование API, поскольку структуры запросов и ответов предсказуемы.

5. Разделение по слоям (Layered System)

Принцип: Архитектура API может включать несколько слоёв, каждый из которых выполняет свою роль, например, маршрутизация запросов, балансировка нагрузки, безопасность. Это позволяет отделять логику приложения от логики хранения данных и работы с пользователями.

Пример:

  • Запрос проходит через балансировщик нагрузки, который распределяет запросы между несколькими серверами для повышения скорости и отказоустойчивости.
  • Серверы обращаются к базе данных или другим сервисам через свои внутренние слои, но клиент видит только один конечный адрес.

Преимущество: упрощает управление, масштабирование и защиту API.

6. Код по запросу (Code on Demand, опционально)

Принцип: Сервер может отправить клиенту исполняемый код, который клиент может использовать для выполнения некоторых действий. Этот принцип используется нечасто и в основном применяется в веб-приложениях.

Пример:

  • Сервер может вернуть клиенту JavaScript-код, чтобы его приложение могло выполнить дополнительные вычисления на стороне клиента.
  • Например, веб-приложение может запрашивать динамическую форму, и сервер отправит HTML или JavaScript для создания формы на стороне клиента.

Преимущество: позволяет уменьшить нагрузку на сервер и добавляет гибкость клиентским приложениям.


Эти принципы помогают сделать REST API надёжным, гибким и масштабируемым. Когда API следует этим принципам, оно остаётся удобным и предсказуемым для пользователей и разработчиков.