我不是在问这里已经问过的问题:What is the difference between @PathParam and @QueryParam
这是一个“最佳实践”或约定问题。
什么时候你会使用@PathParam
而不是@QueryParam
。
我能想到的是,这个决定可能是使用这两个来区分信息模式。让我在下面说明我的LTPO -不太完美的观察。
可以为信息类别保留PathParam使用,这将很好地归入信息树的一个分支。PathParam可用于向下钻取到实体类层次结构。
然而,QueryParam可以保留用于指定属性,以定位类的实例。
例如,
/Vehicle/Car?registration=123
/House/Colonial?region=newengland
/category?instance
@GET
@Path("/employee/{dept}")
Patient getEmployee(@PathParam("dept")Long dept, @QueryParam("id")Long id) ;
vs /category/instance
@GET
@Path("/employee/{dept}/{id}")
Patient getEmployee(@PathParam("dept")Long dept, @PathParam("id")Long id) ;
vs ?category+instance
@GET
@Path("/employee")
Patient getEmployee(@QueryParam("dept")Long dept, @QueryParam("id")Long id) ;
我不认为这样做有一个标准的惯例。在那里吗?然而,我想听听人们如何使用PathParam和QueryParam来区分他们的信息,就像我上面举例说明的那样。我也很想听听这种做法背后的原因。
发布于 2012-07-20 04:49:24
REST本身可能不是一个标准,但阅读一般的REST文档和博客文章应该会给你一些指导,让你找到一种好的方法来构建API。大多数rest API往往只在路径中包含资源名称和资源in。例如:
/departments/{dept}/employees/{id}
一些REST使用查询字符串进行过滤、分页和排序,但由于REST不是一个严格的标准,我建议您检查一些REST API,如github和stackoverflow,看看哪些可以很好地适用于您的用例。
我建议将任何必需的参数放在路径中,并且任何可选的参数都应该是查询字符串参数。在尝试编写匹配不同组合的URL处理程序时,将可选参数放入路径将会变得非常混乱。
发布于 2012-07-19 09:14:10
这就是我要做的。
如果有一个基于id检索记录的场景,例如,您需要获取id为15的员工的详细信息,那么您可以使用@PathParam获取资源。
GET /employee/{id}
如果您需要获取所有员工的详细信息,但一次只需要获取10个员工的详细信息,则可以使用query param
GET /employee?start=1&size=10
这说明开始的员工id 1得到10条记录。
总而言之,使用@PathParam进行基于id的检索。User @QueryParam用于筛选器,或者如果您有用户可以传递的任何固定选项列表。
发布于 2013-04-03 22:00:25
我认为,如果参数标识了特定的实体,则应该使用path变量。例如,要获取我博客上的所有帖子,我请求
GET: myserver.com/myblog/posts
要获得id = 123的帖子,我将请求
GET: myserver.com/myblog/posts/123
但要过滤我的帖子列表,并获取自2013年1月1日以来的所有帖子,我会请求
GET: myserver.com/myblog/posts?since=2013-01-01
在第一个示例中,“post”标识了一个特定的实体(博客文章的整个集合)。在第二个例子中,"123“还代表一个特定的实体(单个博客帖子)。但在最后一个示例中,参数“last =2013-01-01”是一个过滤帖子集合的请求,而不是一个特定的实体。分页和排序将是另一个很好的例子,即
GET: myserver.com/myblog/posts?page=2&order=backward
希望这能有所帮助。:-)
https://stackoverflow.com/questions/11552248
复制相似问题