嵌入式HAL资源集合中没有自我href

时间:2013-10-16 10:17:00

标签: collections href embedded-resource self hal-json

我使用客户端HAL资源中的self href来查找CRUD操作的正确路径。在单个(吨)资源中,这工作正常(请参阅下面的地址资源,包含_links self的{​​{1}}包含在嵌入资源中)但当归结为集合时是一个不同的故事。当集合位于href时,不会呈现集合的_links

之前我通过阅读第一个孩子的网址来解决这个问题。但这还不够。如果收集是空的我只有 一个空数组,没有可能像这样提取url。如果我想在集合中创建新项目,我希望我的客户通过阅读_embedded中的POST self,了解使用href发送数据的位置。将_links包含在我的收藏中是不是一个好主意:

_links

现在我可以访问自我href:

{
    "_links": {
        "self": {
            "href": "http://example.com/api/v1/users/1"
        }
    },
    "_embedded": {
        "contacts": {

编辑(一年后)

最后,我总是通过将嵌入资源的链接添加到父资源来解决这个问题。所以在上面的例子中,我的响应对象看起来像这样:

            "_links": {
                "self": {
                    "href": "http://example.com/api/v1/users/1/contacts"
                }
            },
            "_embedded": {
                "contacts": [
                    {
                        "_links": {
                            "self": {
                                "href": "http://example.com/api/v1/users/1/contacts/2"
                            }
                        },
                        "id": "2",
                        "name": "John Smith"
                    },
                    {
                        "_links": {
                            "self": {
                                "href": "http://example.org/api/v1/users/1/contacts/3"
                            }
                        },
                        "id": "3",
                        "name": "Jane Doe"
                    }
                ],
            }
        },
        "address": {
            "_links": {
                "self": {
                    "href": "http://example.com/api/v1/addresses/1"
                }
            },
            "street": "Bakerstreet 11",
            "postal code": "123456",
            "city": "Some city",
            "country": "Some country",
        }
    },
    "id": "1",
    "name": "John Doe"
}

所以无论我是否嵌入了资源,我总是知道它们的位置。对于联系人集合,我将在{ "_links": { "self": { "href": "http://example.com/api/v1/users/1" }, "contacts": { "href": "http://example.com/api/v1/users/1/contacts" }, "address": { "href": "http://example.com/api/v1/addresses/1" } }, "_embedded": { "contacts": [ { "_links": { "self": { "href": "http://example.com/api/v1/users/1/contacts/2" } }, "id": "2", "name": "John Smith" }, { "_links": { "self": { "href": "http://example.org/api/v1/users/1/contacts/3" } }, "id": "3", "name": "Jane Doe" }, ], "address": { "_links": { "self": { "href": "http://example.org/api/v1/addresses/1" } }, "street": "Bakerstreet 11", "postal code": "123456", "city": "Some city", "country": "Some country", } }, "id": "1", "name": "John Doe" } 数组中添加指向我的集合终结点的链接,并在_links中指定联系人本身。

1 个答案:

答案 0 :(得分:5)

是。这样做不仅是好习惯;它是recommended by the HAL spec

  

每个资源对象应该包含一个“自我”链接,该链接与IANA注册的“自我”关系(由RFC5988定义)相对应,其目标是资源的URI。

资源集合本身就是一种资源,不要忘记。