如果我们有customers
和orders
,我正在寻找获取此数据的正确RESTful方法:
{
"customer": {
"id": 123,
"name": "Jim Bloggs"
"orders": [
{
"id": 123,
"item": "Union Jack Keyring",
"qty": 1
}, {
"id": 987,
"item": "London Eye Ticket",
"qty": 5
}
]
}
}
GET /customers/123/orders
GET /customers/123?inc-orders=1
我是否正确,URL的最后一部分/文件夹(不包括查询字符串参数)应该是返回的资源。
如果是这样,则数字1应该仅返回订单数据,而不包括客户数据。当2号直接指向客户
123
并使用查询字符串参数来实现/过滤返回的客户数据(在这种情况下,包括订单数据)。这两个调用中的哪一个是上述JSON ..的正确RESTful调用? ...还是有3号秘密选项。
最佳答案
您有3个选项,我认为可以认为是RESTful的。
1)GET /customers/12
但始终包括订单。您是否存在客户不希望使用订单的情况?还是订单数组真的可以变大?如果是这样,您可能需要其他选择。
2)GET /customers/123
,其中可能包含指向其订单的链接,如下所示:
{
"customer": {
"id": 123,
"name": "Jim Bloggs"
"orders": {
"href": "<link to you orders go here>"
}
}
}
有了这个,您的客户将必须发出2个请求才能获得客户及其订单。这种方式的好处是,您可以轻松实现订单的整洁分页和过滤。
3)
GET /customers/123?fields=orders
这类似于您的第二种方法。这将允许客户端更有效地使用您的API,但是除非您确实需要限制从服务器返回的字段,否则我不会走这条路。否则,它将为您的API带来不必要的复杂性,您必须对其进行维护。