在我的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。
答案 0 :(得分:1)
在实践中,我在HAL规范中遇到了同样的弱点。一个完全符合要求的客户端会将rel:{}格式视为rel:[{}]的简写,因此从实例切换到资源实例应该没什么大不了的。
但鉴于许多HAL消费者只是将hal + json视为直接json(完全忽略HAL语义),它会令人担忧。我正在与一些开发人员合作,他们认为rel:{}暗示是N对1或1对1的关系。但事实并非如此。一旦我们咬了一次,我决定我们应该始终使用rel:[{}]语法,如果rel可能会超过1作为消费者的提示。我们认为这些rel多重性的变化会破坏兼容性,因为这样做有利于新的rels而不是将单个rel提升到multi,因为它是向后兼容的......然后我们将在下一个主要版本中进行整合。