我对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,
答案 0 :(得分:1)
哪种设计更好取决于用例。
例如,让我们假设有两个用户:
userID=1
)userID=2
)我们还说Alice已经过身份验证,因此后端在某处可以使用userID=1
。
如果Alice想要列出自己的订单,最短的方式是
GET /orders
让后端用户使用userID
。
我们假设请求是为经过身份验证的用户检索订单。如果Alice尝试/users/2/orders
- 她可以看到鲍勃的订单怎么办?如果Alice错误输入并为/users/2/
发出查询
userID
该怎么办(让我们说将来会有新的关系,例如User - > Cart - > Order)?哪种URI方案更容易更新?因此,没有简单的答案,这取决于您的使用案例。如果它只是检索订单,我建议使用{GET|POST} /orders
以获得最大的灵活性和简单性。