java - 需要有关设计的建议 与用户角色保持一致

标签 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

但是嗯..引用了一些网上文档,隐式的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

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

最佳答案

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

例如,假设有两个用户:

  1. 爱丽丝 (userID=1)
  2. 鲍勃 (userID=2)

我们还假设 Alice 已经进行了身份验证,因此后端在某处有可用的 userID=1

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

    GET /orders
    

    并让后端用户获得可用的userID

  2. 假设该请求旨在检索经过身份验证的用户的订单。如果 Alice 尝试 /users/2/orders 会怎样 - 她是否可以查看 Bob 的订单?如果 Alice 多次输错并发出对 /users/2/ 的查询怎么办?

  3. 最后要考虑的事情 - 如果将来有更多属性需要搜索怎么办?如果 userID 从 future 的订单中删除(假设 future 有一个新关系,如用户 --> 购物车 --> 订单)怎么办?哪种 URI 方案更容易更新?

因此,没有简单的答案,这取决于您的用例。如果只是检索订单,我建议使用 {GET|POST}/orders 以获得最大的灵 active 和简单性。

关于java - 需要有关设计的建议 与用户角色保持一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37878094/

相关文章:

java - 如何在仅测试类的接口(interface)的情况下协调单元测试方法和 TDD

java - 如何将一个对象写入另一个对象,同时作为 REST API 的响应返回?

rest - 如何使用像 '/update/:id' 这样的 URL 作为 KendoUI 数据源?

javascript - 使用 Restful API 进行 Birt

java - Spring REST API 的路由与映射术语

java - 如何在android中使用JSONObject解析转义的Json

java - Android:深度 sleep 的时间间隔(System.nanoTime(), System.currentTimeMillis(), SystemClock.elapsedRealtimeNanos())

java - Riemann Siegel Formula in Java的实现,好奇改进余数项

java - 在 JAVA 中从 WADL URL 生成休息客户端

rest - 生成访问 token Instagram API,无需登录?