Вызов JSONAPI для возврата множества объектов, включая собственные отношения - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь сделать запрос GSON JSONAPI, чтобы вернуть определенный набор Foo с.

url.com/foos?filter[foo.id]=13,14

Это работает - до такой степени: Foo имеет отношение, называемое children, которое включает в себя все остальные Foo s, для которых Foo, о которых идет речь, составляет parent, но ответ на запрос GET выше включает пустой список children. Что-то вроде:

{
    "data": [
        {
            "type": "foos",
            "id": "13",
            "attributes": {
                "name": "myFoo",
            },
            "relationships": {
                "children": {
                    "data": []
                },
                "parent": {
                    "data": null
                }
            }
        }, 
        {...}
    ]
}

Единственный раз, когда список children заполняется, это когда дочерний элемент id также включается в список фильтров URL-адресов или когда я отправляю запрос на GET Foo напрямую. Например,

url.com/foos/13

получает ответ:

{
    "data": [
        {
            "type": "foos",
            "id": "13",
            "attributes": {
                "name": "myFoo",
            },
            "relationships": {
                "children": {
                    "data": [
                        {
                            "type": "foo",
                            "id": "18"
                        },
                        {
                            "type": "foo",
                            "id": "19"
                        }
                    ]
                },
                "parent": {
                    "data": null
                }
            }
        }
    ]
}

Как я могу получить набор Foo s, отфильтрованных по id, и убедиться, что каждый Foo содержит список своих дочерних Foo s?

1 Ответ

0 голосов
/ 04 апреля 2019

JSON: спецификация API не зависит от стратегии фильтра:

Примечание: JSON: API не зависит от стратегий, поддерживаемых сервером. Параметр запроса фильтра может использоваться в качестве основы для любого количества стратегий фильтрации. https://jsonapi.org/format/#fetching-filtering

Так что это зависит от вашей реализации. Но похоже, что ваша реализация имеет критическую ошибку. Если я вас правильно понимаю, ваш API возвращает пустой массив в виде связи ресурса для отношения children, даже если у ресурса есть связанные записи. Это критическая ошибка. Сервер может вообще не включать отношения или может предоставить только ссылку на связанный ресурс , но он не должен предоставлять пустой массив под ключом data, если у ресурса есть связанные записи. Пустой массив в виде данных ресурс сообщает клиенту, что связанных записей нет:

Связывание ресурсов ДОЛЖНО быть представлено как одно из следующего:

  • ноль для пустых отношений один к одному.
  • пустой массив ([]) для пустых отношений со многими.
  • один объект идентификатора ресурса для непустых отношений один к одному.
  • массив объектов идентификатора ресурса для непустых отношений ко многим.

https://jsonapi.org/format/#document-resource-object-linkage

Поскольку проблема связана не со спецификацией JSON: API, а с вашей конкретной реализацией, и поскольку вопрос не включает в себя какую-либо серверную библиотеку, на которой основана ваша реализация, невозможно определить причину этой ошибки.

...