休息。比较两个 JSON 表示

REST. Comparing two JSON representations

我有一个标签系统:

标签

所以它们可以嵌套(最大深度 3)

例如:

我有一些带有标签的资源。

地点

我有几个端点:

/api/tags

{
  "items": [
    {
      "_links": {
        "self": {
          "href": "/api/tags/1"
        }
      },
      "id": 1,
      "name": "Food",
      "_embedded": {
        "children": [
          {
            "_links": {
              "self": {
                "href": "/api/tags/4"
              }
            },
            "id": 4,
            "name": "Restaurant",
            "_embedded": {
              "children": []
            }
          },
          {
            "_links": {
              "self": {
                "href": "/api/tags/5"
              }
            },
            "id": 5,
            "name": "Fast food",
            "_embedded": {
              "children": []
            }
          }
        ]
      }
    },
    {
      "_links": {
        "self": {
          "href": "/api/tags/2"
        }
      },
      "id": 2,
      "name": "Medicine",
      "_embedded": {
        "children": []
      }
    },
    {
      "_links": {
        "self": {
          "href": "/api/tags/3"
        }
      },
      "id": 3,
      "name": "Entertainment",
      "_embedded": {
        "children": []
      }
    }
  ]
}

/api/place/1

{
  "id": 1,
  "name": "FooBar Arena",
  "_embedded": {
    "tags": [
      {
        "_links": {
          "self": {
            "href": "/api/tags/1"
          }
        },
        "id": 1,
        "name": "Food"
      },
      {
        "_links": {
          "self": {
            "href": "/api/tags/2"
          }
        },
        "id": 2,
        "name": "Medicine"
      }
    ]
  }
}

因此,当标签本身被列为嵌入式资源时,我不希望它们具有嵌入式资源,但是由于不包括嵌入式子级,我最终得到了具有相同 SELF 的相同数据的两种不同表示 link,客户应该如何比较那些?比较 SELF links 会起作用,但缺少一种表示形式 children

我相信一个好的 HAL 客户端 不会 _embedded 视为表示的一部分。一个好的 HAL 客户端只需使用 _embedded 中的值来预热缓存。 _embedded 中出现的项目仍应出现在 _links 中。

因此,只要标签出现在每个资源的 _links 中,就不需要多次嵌入相同的资源。