复杂JSON API属性上的稀疏字段

问题描述 投票:0回答:1

根据#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"
          }
        }
      }
    }
  ]

结果我只对namebody.headbody.fur.color感兴趣。

解决此问题的正确方法是什么(最好是不需要关系,因为此数据有效)?

json-api crnk
1个回答
0
投票

JSON:API的稀疏字段集功能允许仅请求资源的特定字段:

客户端可以通过包含fields [TYPE]参数来要求端点按类型仅在响应中返回特定的字段。

https://jsonapi.org/format/#fetching-sparse-fieldsets

字段是JSON:API中的属性或关系:

资源对象的属性及其关系统称为其“字段”。

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

稀疏字段集并不意味着对属性或关系的值有影响。如果您有这样的需求,则不应将数据建模为复杂的值,而应将其公开为单独的资源。

请注意,您的数据库架构和API公开的资源无需相同。实际上,在数据库表和JSON:API中的资源之间没有一对一的关系通常很有意义。

[不要害怕拥有多种资源。从长远来看,通常比拥有一种包含复杂对象的资源要好得多:

  • 默认情况下,您可以包括相关资源(例如dog-bodiesdog-legsdog-furs)。
  • 您可以根据父资源的持久性ID自动为该资源生成ID。
  • 如果拥有单独的资源,您可以为API设置更严格的约束和更轻松的文档。
  • 您可以减少冲突的风险,因为您可以支持更新特定部分(例如colordog-furs属性),而不是替换body资源的完整dogs值。

我目前看到的拥有多个资源而不是一个资源的主要缺点是,您无法在同一请求中使用JSON:API v1.0创建或更新多个资源。但是很有可能即将到来的v1.1将不再具有该限制。负责该规范的核心团队的成员针对该用例提出了一个名为Atomic Operations的官方现有文档。

© www.soinside.com 2019 - 2024. All rights reserved.