我对 API 的静态设计感到困惑。
我有两个角色:最终用户和后端(管理员)。通过后端角色,我可以访问用户的任何资源
一个用户可以有多个订单。
所以我根据用户资源定义了
GET /users/{userID} -- get User Information
GET /users/{userID}/orders -- list user order list
POST /users/{userID}/orders -- user make an order
但是嗯..引用了一些网上文档,隐式的userID将在身份验证阶段后被识别,所以这里是使用order资源的不同设计:
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
请告诉我哪一个(用户或订单资源)设计更好,为什么? 谢谢,
最佳答案
哪种设计更好取决于用例。
例如,假设有两个用户:
- 爱丽丝 (
userID=1
) - 鲍勃 (
userID=2
)
我们还假设 Alice 已经进行了身份验证,因此后端在某处有可用的 userID=1
。
如果 Alice 想要列出自己的订单,最短的方法是
GET /orders
并让后端用户获得可用的
userID
。假设该请求旨在检索经过身份验证的用户的订单。如果 Alice 尝试
/users/2/orders
会怎样 - 她是否可以查看 Bob 的订单?如果 Alice 多次输错并发出对/users/2/
的查询怎么办?- 最后要考虑的事情 - 如果将来有更多属性需要搜索怎么办?如果
userID
从 future 的订单中删除(假设 future 有一个新关系,如用户 --> 购物车 --> 订单)怎么办?哪种 URI 方案更容易更新?
因此,没有简单的答案,这取决于您的用例。如果只是检索订单,我建议使用 {GET|POST}/orders
以获得最大的灵 active 和简单性。
关于java - 需要有关设计的建议 与用户角色保持一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37878094/