Хороший дизайн REST с Джексоном / Гсоном

1

Я развиваюсь с помощью Джексона уже пару лет, но меня всегда что-то беспокоило:

Мои модели на сервере имеют отношения друг к другу. Примером может быть следующее: у Lock есть Person которого есть список LogEntry и каждый LogEntry имеет Lock. Чтобы получить блокировку, я вызываю /api/lock/id и я получаю данные о лицах и журналах, однако LogEntry ссылается на Lock чтобы он стал бесконечным циклом.

Есть ли хороший способ/стандарт, который следует учитывать при разработке ваших моделей? Может быть, нужно только вернуть идентификатор ссылок?

Я хочу избежать круговых ссылок (что невозможно с аннотациями во многих случаях), но я также хотел бы избежать написания сериализаторов.

Есть ли у вас другие предложения? (FYI: Im чаще всего использует Backbone на стороне клиента)

Теги:
rest
jackson
backbone.js

1 ответ

1
Лучший ответ

У вас есть несколько вариантов. Один из них заключается в том, чтобы возвращать ссылки на связанный элемент, а не встраивать весь ресурс. Если вам нужно, вы можете поддержать параметр запроса ?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"
}]
  • 0
    Мне нравится второй вариант, который вы продемонстрировали. Я думаю, что собираюсь попробовать это некоторое время и посмотреть, как это работает с Backbone. Большое спасибо!
  • 0
    У вас есть другие решения, например, JSON-LD, и любой другой формат RDF может описывать графики. Или несколькими вызовами ваш клиент может запомнить URL-адреса уже найденных ресурсов, поэтому он не будет вызывать их снова ...
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню