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

Какие бывают методы взаимодействия с сервером, кроме GET?

1.0 Junior🔥 141 комментариев
#Тестирование API

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

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

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

Методы HTTP-запросов: больше, чем просто GET

Кроме GET, существуют и другие ключевые методы HTTP-запросов, которые образуют основу взаимодействия клиента с сервером в архитектуре RESTful API и веб-приложениях в целом. Эти методы, определенные в спецификации HTTP/1.1, часто называют HTTP-глаголами (HTTP Verbs). Они указывают на желаемое действие, которое нужно выполнить с указанным ресурсом.

Основные (и наиболее используемые) методы

  1. POST (Create)
    *   **Назначение:** Используется для **создания нового ресурса** на сервере или для отправки данных, которые должны быть обработаны (например, данные формы).
    *   **Особенности:** Запросы `POST` обычно содержат тело (тело запроса — `body`), в котором передаются данные для создания. Они не являются идемпотентными (повторный идентичный запрос может создать дубликат ресурса) и не кэшируются по умолчанию.
    *   **Пример использования:** Создание нового пользователя, отправка комментария, загрузка файла.
```http
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "Иван",
  "email": "ivan@example.com"
}
```

2. PUT (Update/Replace)

    *   **Назначение:** Используется для **полного обновления существующего ресурса**. Клиент отправляет представление ресурса, которое полностью заменяет текущее.
    *   **Особенности:** `PUT` — **идемпотентный** метод. Многократное выполнение одного и того же запроса `PUT` даст тот же результат, что и однократное. Часто требует указания полного URI ресурса (включая ID).
    *   **Пример использования:** Обновление всей информации о профиле пользователя с ID=123.
```http
PUT /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "Иван Петров",
  "email": "new_email@example.com"
}
```

3. PATCH (Partial Update)

    *   **Назначение:** Используется для **частичного обновления ресурса**. В теле запроса передаются только те поля, которые необходимо изменить.
    *   **Особенности:** В отличие от `PUT`, `PATCH` не заменяет весь ресурс, а вносит изменения в его часть. Не является идемпотентным по умолчанию (зависит от реализации сервера). Стал популярен с развитием REST API, так как более эффективен для точечных правок.
    *   **Пример использования:** Изменение только адреса электронной почты пользователя.
```http
PATCH /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "email": "updated_email@example.com"
}
```

4. DELETE (Delete)

    *   **Назначение:** Удаление указанного ресурса с сервера.
    *   **Особенности:** Идемпотентный метод. Успешное выполнение может возвращать разные коды состояния: `200 OK` (с телом ответа), `202 Accepted` (удаление принято в обработку) или `204 No Content` (успешно удалено, тело ответа отсутствует — наиболее распространенный вариант).
    *   **Пример использования:** Удаление статьи, пользователя, заказа.
```http
DELETE /api/users/123 HTTP/1.1
Host: example.com
```

Другие важные методы

  1. HEAD
    *   **Назначение:** Запрашивает заголовки ответа, идентичные тем, которые были бы получены при `GET`-запросе, но **без тела ответа**. Полезен для проверки существования ресурса, его метаданных (например, `Last-Modified`, `Content-Type`, `Content-Length`) или для валидации кэша, не загружая все содержимое.

  1. OPTIONS
    *   **Назначение:** Описывает **параметры связи** (доступные методы HTTP) для целевого ресурса. Крайне важен для механизма **CORS (Cross-Origin Resource Sharing)**. Когда браузер делает "предзапрос" (`preflight request`) перед сложными cross-origin запросами (например, `POST` с нестандартными заголовками), он использует именно метод `OPTIONS`, чтобы понять, разрешены ли такие действия сервером.
```http
HTTP/1.1 200 OK
Allow: GET, POST, PUT, DELETE, OPTIONS, HEAD
Access-Control-Allow-Methods: GET, POST, PUT
```

7. CONNECT и TRACE

    *   **`CONNECT`** используется для установления туннеля к серверу, идентифицируемому целевым ресурсом (например, для SSL-туннелирования через прокси).
    *   **`TRACE`** выполняет тестовый цикл "промежуточных узлов" (loop-back), возвращая клиенту полученный запрос. Используется для диагностики. Из соображений безопасности он часто отключается на production-серверах, так как может использоваться для атак (например, XST — Cross-Site Tracing).

Практическое значение для QA-инженера

Понимание этих методов критически важно для тестирования API:

  • Валидация поведения: Проверка, что POST действительно создает, PUT — полностью обновляет, а PATCH — частично.
  • Проверка идемпотентности: Убедиться, что повторные PUT или DELETE не вызывают побочных эффектов.
  • Тестирование безопасности: Проверка корректной обработки OPTIONS для CORS, отключения небезопасных методов (например, TRACE) на публичных эндпоинтах.
  • Тестирование негативных сценариев: Использование неподдерживаемого метода (например, PATCH на ресурс, который его не принимает) должно возвращать корректный статус-код 405 Method Not Allowed.
  • Работа с инструментами: Четкое понимание, какой метод выбирать в Postman, SoapUI или при написании автотестов на Python (requests) или JavaScript (fetch, axios).

Таким образом, знание и правильное применение методов HTTP выходит за рамки простого "получения данных" (GET) и является фундаментом для полноценного тестирования клиент-серверного взаимодействия, обеспечения надежности и безопасности веб-приложений.

Какие бывают методы взаимодействия с сервером, кроме GET? | PrepBro