Ответ
Да, технически можно, но это противоречит общепринятым RESTful-практикам и семантике HTTP. Согласно спецификации RFC 7231, POST — это метод запроса с широким назначением, и сервер может интерпретировать его как угодно, включая обновление.
С точки зрения тестирования API важно понимать разницу:
| Метод | Стандартная семантика (REST) | Что проверять в тестах |
|---|---|---|
| POST | Создание нового ресурса (идемпотентность не гарантируется). | Код ответа 201 Created, заголовок Location, тело с новым ресурсом. |
| PUT | Полная замена ресурса по известному URI (идемпотентен). | Код 200 OK или 204 No Content, последующий GET возвращает обновленный ресурс. |
| PATCH | Частичное обновление ресурса (идемпотентность зависит от реализации). | Код 200 OK, проверка, что изменились только указанные поля. |
Пример тест-кейса для нестандартного POST на обновление:
import requests
# Предположим, API использует POST для обновения (нестандартный подход)
update_payload = {"status": "inactive"}
response = requests.post("https://api.example.com/users/123/update", json=update_payload)
# Проверки:
assert response.status_code == 200
assert response.json()["status"] == "inactive"
# Важно: проверить, что другие поля пользователя не изменились случайно
Вывод для QA: При тестировании необходимо сверяться с документацией API. Если API использует POST для обновления, мы тестируем это поведение, но также отмечаем отклонение от лучших практик. Основная проверка — корректность изменения данных и возвращаемых кодов состояния.