什么是更好的设计实践?
如果我有对象A,它包含一些相关对象,例如我有一个car对象,它是各种类型.
应该根据请求api.example.org/cars/1只对ID资源进行响应(所以如果有人需要有关它们的详细信息,那么api.example.org/type/1需要另外一个API调用)
{
"id": 1,"name": "Some Car","types": [
1,2
]
}
或提供有关这些资源的详细信息
{
"id": 1,"types": [
{
"id": 1,"name": "Some Type","something": "Blah"
},{
"id": 2,"something": "Blah"
}
]
}
或者提供可选参数,如“displayAll”,然后提供可以在一个API调用中(在这种情况下为类型)的所有参数的名称的数组.
解决方法
这涉及REST的核心原则之一,称为HATEOAS(超媒体作为应用程序状态的引擎).
对象ID对于客户端是无用的和无意义的.你和他们做什么?将它们提供给搜索功能?构造一个新的URI附加到它的末尾?打电话一个1-800号码,问他们该怎么办?将其打印出来,并将其邮寄给政府机构,帮助API客户找到下一步?
只需返回完整的URI,所有的时间.给客户端的ID应该始终是URI – 它是唯一标识相关资源的东西,可用于检索,更新或删除它.