如何在遵循REST的同时在HAL(JSON版本)中表示集合

时间:2014-08-11 19:35:17

标签: json web-services rest web hateoas

我们说我有一系列书籍,我们称之为图书馆。 GET domain.com/library应该以符合HAL标准的JSON返回库中的书籍列表。我该如何格式化JSON?我怎么能嵌入书籍资源?以下是我目前正在考虑的格式:

{
  "books": [
      {
          "name": "Fight Club",
          "_links": {
              "self": { 
                  "href": "domain.com/library/Fight-Club"
              },
           },
           ...
      },
       ....
  ],
  "_links" : {
       "search": { 
           "href": "domain.com/library/search"
       },
       ...
   },
   "_embedded" : {
       "Fight Club": {
           "author": "Chuck Palahniuk",
           ...
           [Same links as above]
       }
   }
}

1 个答案:

答案 0 :(得分:12)

在编写HAL规范时,_embedded对象用于给定资源的子资源。所以你的骨干HAL JSON看起来就像这样。

{
    "_links": {
        "self": {
            "href": "/library"
        }
    },
    "_embedded": {
        "item": [{
            "_links": {
                "self": {
                    "href": "/library/Fight-Club"
                }
            },
            "author": "Chuck Palahniuk",
            "title":  "Fight Club"
        }]
    }
}

_embedded对象的直接属性为link relationsitem关系是标准关系,表示资源是属于上下文资源的项(在本例中是您的库)。您可以使用CURIEs创建自定义链接关系。

请注意顶级对象中缺少books数组。如果您愿意,可以包括它,但这只是一种便利。 HAL库只会知道您在_links_embedded中添加的内容。有关HAL中的集合以及决定数据放置位置的人为因素,请参阅此discussion