Приветствую участников тостера!
Если взять к примеру такую схему отношений постов и картинок (OneToMany):
Posts
title
content
Images
src
post_id
Как будет логически правильней организовать бизнес-логигу и маршруты api на бекэнде, при создании нового поста например.
Мне видится такой вариант сценария:
Юзер заполняет поля title и content на клиенте, а также загружает необходимые картинки, клиент делая запрос POST по маршруту /images/uploads/ с Content-Type: multipart/form-data, получает json с успешно добавленными картинками, что-то типа такого:
{
"status": "success",
"images": [
{
"id": 1,
"src": "/uploads/foo.png"
},
{
"id": 2,
"src": "/uploads/bar.png"
}
]
}
Клиент выводит эти картинки как превьюхи.
После этого Юзер нажимает кнопку submit, срабатывает хендлер, клиент сериализует title и content данные и отправляет их POST запросом на /api/posts/, если данные валидны то в ответе идет примерно такое:
{
"status": "success",
"id": 1
}
Клиент принимает id добавленного поста и делает уже другой запрос для связывания поста с картинками, предположим метод будет PATCH или PUT на маршрут /api/posts/1/images/, потому как картинки уже загружены на сервер и имеются в базе, в теле запроса можно отправить то что прислал нам /images/uploads/.
Проблем нет когда такая простая схема, а если необходимо добавить еще к этому связь постов к тегам при этом еще нужно обеспечить валидность данных каждой модели, чтобы пост создался корректно.
Или же лучше отправлять целиком данные о посте - title, content, images, tags, ...?
Еще приходила такая мысль конструировать форму динамически на клиенте и отправлять как форму а не как json но получать при этом json о статусе выполненного запроса, но это уже будет не restful, а наверное просто json api.
Вобщем кто как делает, буду рад услышать все за и против.