根据#document-resource-object-attributes,允许属性具有“复杂”值,即任何有效的JSON值。
使用#fetching-sparse-fieldsets,可以选择内容的子集。但是,所有示例都与属性名称匹配。
例如:
{
"data": [
{
"type": "dogs",
"id": "3f02e",
"attributes": {
"name": "doggy",
"body": {
"head": "small",
"legs": [
{
"position": "front",
"side": "right"
},
{
"position": "front",
"side": "left"
}
],
"fur": {
"color": "brown"
}
}
}
}
]
结果我只对name
,body.head
和body.fur.color
感兴趣。
解决此问题的正确方法是什么(最好是不需要关系,因为此数据有效)?
JSON:API的稀疏字段集功能允许仅请求资源的特定字段:
客户端可以通过包含fields [TYPE]参数来要求端点按类型仅在响应中返回特定的字段。
字段是JSON:API中的属性或关系:
资源对象的属性及其关系统称为其“字段”。
稀疏字段集并不意味着对属性或关系的值有影响。如果您有这样的需求,则不应将数据建模为复杂的值,而应将其公开为单独的资源。
请注意,您的数据库架构和API公开的资源无需相同。实际上,在数据库表和JSON:API中的资源之间没有一对一的关系通常很有意义。
[不要害怕拥有多种资源。从长远来看,通常比拥有一种包含复杂对象的资源要好得多:
dog-bodies
,dog-legs
,dog-furs
)。color
的dog-furs
属性),而不是替换body
资源的完整dogs
值。我目前看到的拥有多个资源而不是一个资源的主要缺点是,您无法在同一请求中使用JSON:API v1.0
创建或更新多个资源。但是很有可能即将到来的v1.1
将不再具有该限制。负责该规范的核心团队的成员针对该用例提出了一个名为Atomic Operations的官方现有文档。