我正在尝试发出一个JSONAPI GET请求来返回一组特定的Foo
s。
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
过滤的一组id
s并确保每个Foo
包含其子Foo
s的列表?
JSON:API规范与过滤策略无关:
注意:JSON:API与服务器支持的策略无关。过滤器查询参数可用作任意数量的过滤策略的基础。 https://jsonapi.org/format/#fetching-filtering
所以这取决于您的实施。但似乎您的实现有一个严重的错误。如果我理解正确,即使资源有相关记录,您的API也会为resource linkage关系返回一个空数组children
。这是一个严重的错误。服务器可能根本不包含关系,或者它可能只提供related resource link,但如果资源具有相关记录,则它不能在data
密钥下提供空数组。作为资源链接数据的空数组告诉客户端没有任何相关记录:
资源链接必须表示为以下之一:
- null为空对一关系。
- 空数组([]),用于空对多关系。
- 非空对一关系的单个资源标识符对象。
- 非空对多关系的资源标识符对象数组。
https://jsonapi.org/format/#document-resource-object-linkage
由于该问题与JSON:API规范无关,而是与您的具体实现有关,并且由于问题不包括您的实现所基于的任何服务器端库,因此无法确定此错误的原因。