Я развиваюсь с помощью Джексона уже пару лет, но меня всегда что-то беспокоило:
Мои модели на сервере имеют отношения друг к другу. Примером может быть следующее: у Lock
есть Person
которого есть список LogEntry
и каждый LogEntry
имеет Lock
. Чтобы получить блокировку, я вызываю /api/lock/id
и я получаю данные о лицах и журналах, однако LogEntry
ссылается на Lock
чтобы он стал бесконечным циклом.
Есть ли хороший способ/стандарт, который следует учитывать при разработке ваших моделей? Может быть, нужно только вернуть идентификатор ссылок?
Я хочу избежать круговых ссылок (что невозможно с аннотациями во многих случаях), но я также хотел бы избежать написания сериализаторов.
Есть ли у вас другие предложения? (FYI: Im чаще всего использует Backbone на стороне клиента)
У вас есть несколько вариантов. Один из них заключается в том, чтобы возвращать ссылки на связанный элемент, а не встраивать весь ресурс. Если вам нужно, вы можете поддержать параметр запроса ?expand=
который сообщает серверу о включении всего ресурса. Другой вариант заключается в создании отдельного ресурса для управления отношениями, таких как /log-entry-locks, которые могут выглядеть примерно так:
GET /log-entry-locks?log-entry=15
[{
"id": 1345,
"log-entry": "/log-entries/15",
"lock": "/locks/22"
},
{
"id": 1346,
"log-entry": "/log-entries/15",
"lock": "/locks/46"
}]