Ответ
Технически это возможно реализовать, но это считается антипаттерном и нарушением семантики REST API.
Почему это плохая практика:
Метод PUT предназначен для полной замены ресурса по конкретному, известному URI. Он должен быть идемпотентным, то есть многократное выполнение одного и того же запроса должно приводить к одному и тому же состоянию ресурса.
При попытке обновить несколько ресурсов одним PUT-запросом возникают проблемы:
- Нарушение семантики:
PUTработает с одним ресурсом. Например,PUT /users/123заменяет пользователя с ID 123. Какой URI использовать для замены и пользователя, и продукта одновременно?PUT /batch-updateсемантически некорректен. - Потеря идемпотентности: Если часть операции (например, обновление пользователя) пройдет успешно, а другая (обновление продукта) — нет, повторный запрос приведет к другому результату, нарушая принцип идемпотентности.
- Сложность обработки ошибок: Атомарность операции становится проблемой. Если один из объектов не удалось обновить, нужно ли откатывать остальные изменения?
Неправильный пример (как делать не надо):
# Этот запрос семантически неверен для PUT
PUT /api/resources
Content-Type: application/json
{
"user": {"id": 1, "name": "Alice", "email": "alice@example.com"},
"product": {"id": 42, "name": "Laptop", "price": 1200}
}
Рекомендация:
Для массовых или пакетных операций всегда используйте метод POST. Он специально предназначен для сценариев, которые не укладываются в простую CRUD-модель (GET, PUT, DELETE).