Ответ
Да, POST — это наиболее гибкий и подходящий метод для выполнения пакетных (batch) операций, таких как создание или обновление нескольких ресурсов разных типов за один запрос.
Принцип работы:
В теле POST-запроса передается структурированный документ (обычно JSON), содержащий массив или объект с данными для каждого ресурса. Сервер обрабатывает эту структуру и выполняет соответствующие операции.
Пример на FastAPI:
Серверная часть, принимающая данные о пользователе и продукте одновременно.
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
class UserUpdate(BaseModel):
id: int
name: str
class ProductUpdate(BaseModel):
sku: str
stock: int
class BatchUpdateRequest(BaseModel):
users: List[UserUpdate]
products: List[ProductUpdate]
@app.post("/batch-update")
async def batch_update(data: BatchUpdateRequest):
# Здесь логика обновления пользователей и продуктов в БД
print(f"Updating {len(data.users)} users...")
print(f"Updating {len(data.products)} products...")
return {"status": "success", "updated_items": data.dict()}
Пример тела JSON-запроса:
{
"users": [
{ "id": 1, "name": "Alice" },
{ "id": 2, "name": "Bob" }
],
"products": [
{ "sku": "TSHIRT-RED-L", "stock": 99 }
]
}
Ключевые аспекты:
- Гибкость:
POSTне привязан к семантике полного или частичного обновления и идеально подходит для сложных бизнес-операций. - Неидемпотентность: Повторная отправка
POST-запроса может привести к созданию дубликатов или повторному выполнению операции. Это ожидаемое поведение. - URL: Запрос обычно отправляется на специальный эндпоинт, отражающий суть операции (например,
/api/batch-updateили/api/transactions).