子对象的REST URL概念

时间:2014-01-25 15:23:12

标签: java web-services rest

我想构建我的应用程序RESTFul。

什么是subObjects的普通URI概念。

我的例子:

我有一些用户。我通过/users/:id获得了一位用户。现在这个用户可以评级。最好的概念是在/users/:id/ratings上执行userRatings(GET,POST,PUT,DELETE),或者将它们作为/ratings/上的自己的对象处理。或两者兼而有之?

我的问题:

  • /ratings/如何获得特定的评级列表时 用户(/ratings/?userId=1?)。
  • 对象通常在URI中是否复数?

1 个答案:

答案 0 :(得分:2)

网址方案取决于主要取决于您对数据模型的处理方式,例如你想如何查询这些评级:

  • 如果您只想显示单个用户的评分,请将它们放在/users/:id/ratings

  • 如果您需要类似“10位顶级用户”的内容,请考虑GET /users?toprated之类的内容 - 此处您正在寻找用户,因此网址应表示成为/users

  • 如果您希望在多个用户中获得评分,例如要查找包含“杰出”字样的所有评分,/ratings/更有意义:搜索自然表示为GET /ratings?q=outstanding - 您需要评分,因此网址应为/ratings加上请求参数以限制您想要的评级类型

在任何一种情况下,除非您正在构建庞大的公共API,并且在发布日期望大量客户,否则请使用可行的方法并根据需要更改URL方案。

至于单数/复数辩论:对路径段使用复数,即/users/ratings因为它自然地来自REST的“资源”构建块, “资源集合”:/users有一组用户(接受GET,POST),/users/:id有一个用户(接受GET,PUT,DELETE)。