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

Mik*_*aki 7 rest json web-services hateoas web

假设我有一系列书籍,我们称之为图书馆.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]
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ric 12

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

{
    "_links": {
        "self": {
            "href": "/library"
        }
    },
    "_embedded": {
        "item": [{
            "_links": {
                "self": {
                    "href": "/library/Fight-Club"
                }
            },
            "author": "Chuck Palahniuk",
            "title":  "Fight Club"
        }]
    }
}
Run Code Online (Sandbox Code Playgroud)

_embedded对象的直接属性是链接关系.该item关系是一个标准的关系,这意味着资源是属于上下文资源的项目(在这种情况下,你的库).您可以使用CURIE创建自定义链接关系.

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