【发布时间】:2014-03-09 08:19:56
【问题描述】:
我目前正在设计一个 API 来处理来自移动客户端的请求。为了在后端和客户端之间实现某种程度的解耦,我想以 RESTful 方式定义 Web 服务。我面临的挑战是一次调用返回多个具有不同类型的对象。
假设我们有以下模型:
- 港口 ...顶级入口
- 船棚 ...分配到特定港口 (0..n)
- 船 ...分配给特定的船棚 (0..n),或直接分配给港口 (0..n)
据我了解 REST,如果我现在想显示港口中的所有船只和棚屋,我会发送两个请求:
/harbours/{harbour_id}/boats 返回所有船只的列表。棚屋中的船将包含一个链接到它们所在的棚屋的 ID
/harbours/{harbour_id}/sheds返回所有棚子的列表
由于我想在移动场景中使用 Web 服务,因此将这两个调用合二为一是理想的。然后,这可以返回嵌套有棚对象的船列表,或者并列返回两种对象类型:
/harbours/22/boats
[
{
"id":1,
"boatName":"Mary",
"boatShed":{
"id":1,
"shedName":"Dock 1",
"capacity":55
}
},
{
"id":2,
"boatName":"Jane",
"boatShed":{
"id":1,
"shedName":"Dock 1",
"capacity":55
}
}
]
或
/harbours/22/boats
{
"boats":[
{
"id":1,
"boatName":"Mary",
"boatShedId":1
},
{
"id":2,
"boatName":"Jane",
"boatShedId":1
}
],
"sheds":[
{
"id":1,
"shedName":"Dock 1",
"capacity":55
}
]
}
我现在的问题是,这些方式中哪一种更接近 REST 背后的理念,还是根本不是 RESTful?
【问题讨论】:
-
第一个选项更加 RESTful。如果您要船,第二个返回棚子。