使用CURIE的rel是​​否可以用于项目的单个实例以及这些相同项目的集合?

时间:2015-01-30 18:18:08

标签: api rest hateoas rel curie

在我的API中,我看起来像这样:

对于单个项目

{
    ...
    _links: {
        ...,
        "api:activities/activity-resource": {
            "href": "..."
        }
    }
}

在另一个资源上,我有多个activity-resource个实例。我该如何表达这个?以下是好的:

对于集合

{
    ...
    _links: {
        ...,
        "api:activities/activity-resource": [{
            "href": "..."
        }, {
            "href": "..."
        }]
    }
}

它有意义,因为它们仍然是activity-resource的实例,并且人类可以查找文档以获取有关如何处理这些资源的信息。但是,现在我的API有点不一致,因为在某些表示中,api:activities/activity-resource rel指向单个实例,而在其他表示中,它指向一个集合。

我可以让开发人员可以从API文档中找出他/她需要做的事情,但它也有助于获得一致的API。

1 个答案:

答案 0 :(得分:1)

在实践中,我在HAL规范中遇到了同样的弱点。一个完全符合要求的客户端会将rel:{}格式视为rel:[{}]的简写,因此从实例切换到资源实例应该没什么大不了的。

但鉴于许多HAL消费者只是将hal + json视为直接json(完全忽略HAL语义),它会令人担忧。我正在与一些开发人员合作,他们认为rel:{}暗示是N对1或1对1的关系。但事实并非如此。一旦我们咬了一次,我决定我们应该始终使用rel:[{}]语法,如果rel可能会超过1作为消费者的提示。我们认为这些rel多重性的变化会破坏兼容性,因为这样做有利于新的rels而不是将单个rel提升到multi,因为它是向后兼容的......然后我们将在下一个主要版本中进行整合。