Определить экземпляры на стороне клиента Spring Data Rest - PullRequest
0 голосов
/ 26 ноября 2018

В настоящее время мы создаем API с Spring Data Rest, который предоставляет ресурсы на принципах HATEOAS.

На стороне клиента у нас есть список объектов X, каждый из которых содержит набор объектов Y, которые нам часто нужно фильтровать для конкретного экземпляра.Этот список уже получен, поэтому нам не нужно делать дополнительные запросы.Конкретный экземпляр определяется другим объектом Z, который имеет отношение один к одному с Y. Теперь вопрос состоит в том, как мы можем лучше всего (в спокойной манере HATEOAS) фильтровать по Y, не имея идентификаторов из экземпляров?

Проблема в основном в том, что отношение один к одному дает нам URI в формате (отношение элемента):

"Z": {
     "href": "https://URL/Z/3/Y"
     }

В то время как для фильтрации списка нам понадобится идентификатор коллекции в формате:

"Y": {
     "href": "https://URL/Y/9"
     }

Предложения:

  1. Мы могли бы предоставить идентификаторы для экземпляров, но это не рекомендуется, поскольку утверждается, что ссылка на самоссылку уже является идентификатором.(см. здесь )

  2. Мы могли бы использовать URI в качестве идентификатора.Однако, поскольку мы извлекли только Z, URI имеет формат «Zentities / Zidentifier / Yentity» вместо «/ Yentities / Yidentifier».Таким образом, нам нужно будет сделать дополнительный запрос, чтобы определить собственную связь каждой сущности Y, которую мы должны искать.

  3. Вместо этого мы могли бы выполнить поиск в бэкэнде (даже если все ресурсы уже загружены на клиенте) и использовать идентифицированный связанный объект Z. Это объясняется здесь .

Относительно (2) Почему это стандартный формат в первую очередь?Как это можно изменить в Spring Data Rest?(ссылка на элемент против коллекции)

Относительно (3) Как далеко нужно принять представление данных для конкретной потребности клиента?

Буду благодарен за предложения по передовой практике для решения этой проблемы..

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...