Здравствуйте.
Появилась задача организовать тривиальное RESTful API для внутреннего пользования, подключил FOSRestBundle, но не использую его на 100% - взял только View оттуда.
Появился вопрос с де/сериализацией данных: есть у меня сущности Group (id, name) и Item с полями (id, name, group).
Сначала я делаю
POST /groups с телом
{
"name": "foo"
}
После чего
GET /groups и получаю что-то вроде
[
{
"id": "8215471f-834b-49fa-8a32-ff4a2f849bdf",
"name": "foo"
}
]
Тут всё ок. Настало время сохранить Item: делаю
POST /items с телом
{
"name": "bar",
"group": "8215471f-834b-49fa-8a32-ff4a2f849bdf"
}
Item сохраняется, иду его читать
GET /items/d3e197d2-6df5-4335-9eb8-d1ee1da83fa3 и получаю
{
"name": "bar",
"group": {
"id": "8215471f-834b-49fa-8a32-ff4a2f849bdf",
"name": "foo"
}
}
Хотя клиент ожидает увидеть ровно то, что прислал + id:
{
"name": "bar",
"group": "8215471f-834b-49fa-8a32-ff4a2f849bdf"
}
Вопрос: я неверно себе представляю логику работы REST или же я неверно настроил сериализатор?
Я исхожу из логики, что клиент после GET захочет взять тело ответа, модифицировать в нём одно поле (например, name) и отправить его с помощью PUT обратно, но в таком случае запрос окажется невалидным.