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

В чём разница между GET, POST и PUTCH?

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

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

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

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

Различия между HTTP-методами GET, POST и PUT

В контексте HTTP-протокола, методы GET, POST и PUT (имеется в виду PATCH, так как "PUTCH" — это, вероятно, опечатка) являются фундаментальными для взаимодействия клиента с сервером в архитектуре RESTful API. Как QA-инженер, я должен глубоко понимать их семантику, чтобы правильно проектировать тесты, валидировать поведение API и находить критические дефекты. Ниже — детальное сравнение.

1. GET (Idempotent — Идемпотентный)

GET используется для запроса данных с сервера. Он должен только получать информацию, не изменяя состояние сервера.

  • Семантика: Безопасный (safe) и идемпотентный. Многократные идентичные запросы возвращают один и тот же результат.
  • Данные: Параметры передаются в URL (query string), например:
    GET /api/users?id=123 HTTP/1.1
    Host: example.com
    
  • Ограничение длины: Есть, так как длина URL ограничена (зависит от браузера/сервера).
  • Кэширование: Поддерживается браузерами и прокси.
  • Тестирование: Проверяем корректность возвращаемых данных (статус 200), обработку неверных параметров (статус 400, 404), производительность и кэширование.

2. POST (Non-Idempotent — Неидемпотентный)

POST используется для отправки данных на сервер, часто для создания нового ресурса или выполнения сложной операции.

  • Семантика: Небезопасный и неидемпотентный. Каждый запрос может создать новый ресурс или привести к разным результатам.
  • Данные: Тело запроса (body) в форматах JSON, XML, form-data. Заголовок Content-Type обязателен.
    POST /api/users HTTP/1.1
    Host: example.com
    Content-Type: application/json
    
    {"name": "Alice", "email": "alice@example.com"}
    
  • Ограничение длины: Фактически отсутствует, ограничивается настройками сервера.
  • Кэширование: Не кэшируется по умолчанию.
  • Тестирование: Ключевой метод для негативных сценариев! Проверяем:
    *   Создание ресурса (статус 201 Created).
    *   Валидацию входных данных (некорректный email → 400 Bad Request).
    *   Отсутствие дублирования (при повторном отправлении — 409 Conflict или создание второго ресурса, что может быть багом).
    *   Безопасность: инъекции, размер тела, обработка больших файлов.

3. PUT и PATCH (Idempotent / Non-Idempotent)

Здесь важно разделить два разных метода, так как "PUTCH" — это гибрид, которого не существует.

  • PUT (Идемпотентный): Используется для полного обновления ресурса. Клиент отправляет полное представление ресурса, заменяя существующее.
    PUT /api/users/123 HTTP/1.1
    Host: example.com
    Content-Type: application/json
    
    {"id": 123, "name": "Bob", "email": "bob@example.com"} // Все поля обязательны
    
    *Тестирование:* Проверяем, что при повторном одинаковом запросе состояние ресурса не меняется (идемпотентность). Отсутствующие поля могут быть обнулены (это важно!).

  • PATCH (Не всегда идемпотентный): Используется для частичного обновления ресурса. Отправляются только изменяемые поля.
    PATCH /api/users/123 HTTP/1.1
    Host: example.com
    Content-Type: application/json-patch+json // Один из возможных форматов
    
    [{"op": "replace", "path": "/email", "value": "newbob@example.com"}]
    
    *Тестирование:* Самый сложный для тестирования метод. Нужно проверять:
        *   Корректность применения частичных изменений.
        *   Форматы запросов (JSON Patch, JSON Merge Patch).
        *   **Неидемпотентность операций** (например, инкремент счётчика).
        *   Обработку некорректных "путей" (path) к полям.

Резюме для QA-инженера

АспектGETPOSTPUTPATCH
Основная цельПолучение данныхСоздание ресурса / действиеПолное обновлениеЧастичное обновление
ИдемпотентностьДаНетДаЗависит от операции
Передача данныхURL (query)Тело запроса (body)Тело запроса (body)Тело запроса (body)
Коды ответов200 (OK), 404 (Not Found)201 (Created), 400 (Bad Request)200 (OK), 204 (No Content)200 (OK), 204 (No Content)
Фокус тестированияКорректность данных, кэшВалидация, безопасность, созданиеПолная замена, идемпотентностьЧастичные изменения, сложная валидация

Ключевое для тестирования: Всегда проверяйте соблюдение семантики HTTP-методов. Например, GET-запрос не должен изменять данные на сервере (это критическая уязвимость безопасности или дефект). Используйте инструменты вроде Postman, curl или автоматизированные фреймворки (REST Assured, pytest) для комплексной проверки статус-кодов, заголовков, тела ответов и побочных эффектов в БД. Понимание этих различий — основа для тест-Cаesign API, составления чек-листов и создания эффективных автоматизированных тестов.

В чём разница между GET, POST и PUTCH? | PrepBro