Ответ
Да, POST-запрос с пустым телом (Content-Length: 0) допустим по спецификации HTTP. Его использование зависит от контракта конкретного API.
Типичные сценарии применения:
- Триггерное действие: Запрос служит сигналом, а все необходимые параметры передаются в URL (как путь или query-параметры).
POST /api/v1/tasks/42/run– запустить задачу с ID 42.
- Создание ресурса со значениями по умолчанию: Сервер создаёт сущность, инициализированную стандартными значениями.
POST /api/v1/notes– создать новую пустую заметку.
- Уведомление о событии (webhook): Внешний сервис может отправлять POST-запросы с пустым телом для простых пингов.
Пример отправки на Python (requests):
import requests
# Явно указать пустое тело
response = requests.post('https://api.example.com/trigger', data=None)
# Или просто не передавать параметр 'data'/'json'
response2 = requests.post('https://api.example.com/trigger')
print(f'Status: {response.status_code}') # Может быть 200, 201, 204, 400, 422
print(f'Response: {response.text}')
Что важно проверить при тестировании такого API:
- Ожидаемый статус-код: Успешный запрос может возвращать
200 OK,201 Createdили204 No Content. - Обработка ошибок: Сервер должен корректно валидировать запрос и возвращать понятные ошибки (например,
400 Bad Request, если ожидалось тело, или422 Unprocessable Entity). - Логика приложения: Не приводит ли такой запрос к созданию "битых" или неполных записей в БД.
- Документация: Всегда сверяйтесь с документацией API. Если в спецификации (OpenAPI/Swagger) тело запроса отмечено как
required, пустой запрос будет отклонён.