← Назад к вопросам

Из чего состоит структура REST-запроса?

1.0 Junior🔥 231 комментариев
#API и интеграции#Форматы данных и протоколы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Структура REST-запроса

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

1. Метод HTTP (HTTP Method)

Определяет тип операции, которую необходимо выполнить:

  • GET — получение данных ресурса, не изменяет состояние
  • POST — создание нового ресурса
  • PUT — полное обновление существующего ресурса
  • PATCH — частичное обновление ресурса
  • DELETE — удаление ресурса
  • HEAD — получение заголовков без тела ответа
  • OPTIONS — получение информации о доступных методах

Идемпотентность: GET, PUT, DELETE, HEAD, OPTIONS — идемпотентны (повторное выполнение не меняет результат). POST и PATCH — не идемпотентны.

2. URL (Uniform Resource Locator)

Определяет адрес ресурса. Структура:

https://api.example.com/api/v1/users/123

Компоненты:

  • Схемаhttps:// (всегда HTTPS для API)
  • Хостapi.example.com
  • Путь (Path)/api/v1/users/123 — идентифицирует ресурс
  • Версия API/v1/ — обеспечивает обратную совместимость
  • ID ресурса123 — конкретный ресурс

Best Practice: использовать существительные во множественном числе (/users, /products), не глаголы (/getUsers — неправильно).

3. Query Parameters (Параметры запроса)

Передаются в строке запроса после ?. Используются для фильтрации, сортировки, пагинации:

GET /api/v1/users?limit=10&offset=0&sort=name&filter=active

Примеры:

  • limit, offset — пагинация
  • sort, order — сортировка
  • filter, search — фильтрация
  • include — какие поля включить

4. Заголовки (Headers)

Метаданные о запросе, передаются в виде ключ-значение:

Content-Type: application/json
Authorization: Bearer token123
Accept: application/json
User-Agent: MyApp/1.0
X-Request-ID: abc-123-def

Важные заголовки:

  • Content-Type — формат тела запроса (application/json, application/x-www-form-urlencoded)
  • Authorization — учетные данные (Bearer token, Basic auth)
  • Accept — ожидаемый формат ответа
  • User-Agent — информация о клиенте
  • Custom HeadersX-* для пользовательских данных (ID сессии, версия API)

5. Тело запроса (Request Body)

Данные, отправляемые на сервер. Используется для POST, PUT, PATCH запросов. Обычно в формате JSON:

{
  "name": "John Doe",
  "email": "john@example.com",
  "age": 30
}

Форматы:

  • JSON — стандарт в современных API
  • XML — реже, для legacy систем
  • Form Data — для HTML форм
  • Binary — для файлов

Пример полного REST-запроса

POST /api/v1/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer token123
Content-Length: 47

{
  "name": "Alice",
  "email": "alice@example.com"
}

Типичный ответ (Response)

HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 89

{
  "id": 1,
  "name": "Alice",
  "email": "alice@example.com",
  "created_at": "2025-03-28T10:30:00Z"
}

Статус коды:

  • 2xx — успех (200 OK, 201 Created, 204 No Content)
  • 4xx — ошибка клиента (400 Bad Request, 401 Unauthorized, 404 Not Found)
  • 5xx — ошибка сервера (500 Internal Server Error, 503 Service Unavailable)

Практические рекомендации

При проектировании REST API я придерживаюсь принципов:

  • Версионирование API для поддержки старых клиентов
  • Правильный выбор статус кодов для разных сценариев
  • Документирование всех параметров и возможных ошибок
  • Использование HTTPS для безопасности
  • Rate limiting для защиты от abuse
  • Логирование всех запросов для отладки и аналитики