REST终点应该去哪里?

时间:2017-02-10 08:33:47

标签: rest api-design

假设有“USERS AND ORDERS”

针对特定用户的订单列表

你可以做到

  • /user/3/order_list
  • /order/?user=3

首选哪一个?为什么?

3 个答案:

答案 0 :(得分:1)

可选参数往往更容易放入查询字符串中。

如果要在参数值与现有资源不对应时返回404错误,那么我会倾向于路径段参数。例如/ customer / 232其中232不是有效的客户ID。

但是,如果要返回空列表,则在未找到参数时查询字符串参数。例如/联系人?名称=戴夫

如果参数影响整个URI结构,则使用路径,例如语言参数/en/document/foo.txt与/document/foo.txt?language=en

如果唯一标识符在路径中而不是查询参数。

路径对搜索引擎/浏览器历史记录/导航非常友好。

答案 1 :(得分:0)

当我开始创建API时,我正在考虑同样的问题 Video from apigee。帮助了我很多。

简而言之,当您决定构建API时,您应该决定哪个实体是独立的,哪个实体只与某人有关。
例如,如果您具有创建/更新/删除操作的订单的特定端点,则可以使用第二种方法/order/?user=3。 换句话说,如果订单只有一个表示,取决于用户,他们没有任何特殊的互动,那么你可以先接近。

There is also nice article about best practice

答案 2 :(得分:0)

REST的重点是资源。您应该尽可能地将它们映射到您将要获得的实际请求。我绝对不会称之为order_list,因为这看起来像是一个动作(您已经#34;列出"订单,而GET应该足以告诉您你得到了什么东西)

所以,首先我认为您应该/users而不是/user,然后将其视为树结构:

  • 卖家(缺少更好的名字)可以有多个用户
  • 用户可以拥有多个订单
  • 订单可以包含多个商品

所以,我会去寻找类似的东西:

  • 卖家可以通过yourdomain.com/my/users
  • 查看其用户
  • 可以使用yourdomain.com/my/users/3
  • 查看单个用户的详细信息
  • 可以使用yourdomain.com/my/users/3/orders
  • 查看单个用户的订单
  • 可以使用yourdomain.com/my/users/3/orders/5
  • 查看单个订单的项目