如果我们有customersorders,我正在寻找获取此数据的正确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带来不必要的复杂性,您必须对其进行维护。

10-04 20:46
查看更多