需要有关设计的建议与用户角色一起休息

时间:2016-06-17 09:34:28

标签: java rest

我对API的设计感到困惑。

我有两个角色是最终用户和后端(管理员)。使用后端角色,我可以访问用户的任何资源

用户可以拥有多个订单。

所以我根据用户资源

进行了定义
GET /users/{userID} -- get User Information
GET /users/{userID}/orders -- list user order list
POST /users/{userID}/orders -- user make an order

但是嗯......在参考了一些在线文档后,隐式用户ID将在认证阶段后被识别出来,所以这里是使用订单资源的不同设计:

GET /orders/ --list user order list by user account(backend can get all)
GET /orders/{orderID}  --get orderID by userID
POST /orders/ -- user make an order.

使用此定义,当后端用户想要按用户列出订单时。我应该使用哪种方法?

GET /orders?user={userID} (user as query parameter) -- List order with userID

或者

GET /users/{userID}/orders

请告诉我哪一个(用户订单资源)设计更好,为什么? TKS,

1 个答案:

答案 0 :(得分:1)

哪种设计更好取决于用例。

例如,让我们假设有两个用户:

  1. Alice(userID=1
  2. Bob(userID=2
  3. 我们还说Alice已经过身份验证,因此后端在某处可以使用userID=1

    1. 如果Alice想要列出自己的订单,最短的方式是

      GET /orders
      

      让后端用户使用userID

    2. 我们假设请求是为经过身份验证的用户检索订单。如果Alice尝试/users/2/orders - 她可以看到鲍勃的订单怎么办?如果Alice错误输入并为/users/2/发出查询

    3. ,该怎么办?
    4. 要考虑的最后一件事 - 如果将来有更多属性要搜索怎么办?如果从未来的订单中删除userID该怎么办(让我们说将来会有新的关系,例如User - > Cart - > Order)?哪种URI方案更容易更新?
    5. 因此,没有简单的答案,这取决于您的使用案例。如果它只是检索订单,我建议使用{GET|POST} /orders以获得最大的灵活性和简单性。