首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >何时使用@QueryParam vs @PathParam

何时使用@QueryParam vs @PathParam
EN

Stack Overflow用户
提问于 2012-07-19 08:18:57
回答 17查看 451.3K关注 0票数 318

我不是在问这里已经问过的问题:What is the difference between @PathParam and @QueryParam

这是一个“最佳实践”或约定问题。

什么时候你会使用@PathParam而不是@QueryParam

我能想到的是,这个决定可能是使用这两个来区分信息模式。让我在下面说明我的LTPO -不太完美的观察。

可以为信息类别保留PathParam使用,这将很好地归入信息树的一个分支。PathParam可用于向下钻取到实体类层次结构。

然而,QueryParam可以保留用于指定属性,以定位类的实例。

例如,

  • /Vehicle/Car?registration=123
  • /House/Colonial?region=newengland

/category?instance

代码语言:javascript
复制
@GET
@Path("/employee/{dept}")
Patient getEmployee(@PathParam("dept")Long dept, @QueryParam("id")Long id) ;

vs /category/instance

代码语言:javascript
复制
@GET
@Path("/employee/{dept}/{id}")
Patient getEmployee(@PathParam("dept")Long dept, @PathParam("id")Long id) ;

vs ?category+instance

代码语言:javascript
复制
@GET
@Path("/employee")
Patient getEmployee(@QueryParam("dept")Long dept, @QueryParam("id")Long id) ;

我不认为这样做有一个标准的惯例。在那里吗?然而,我想听听人们如何使用PathParam和QueryParam来区分他们的信息,就像我上面举例说明的那样。我也很想听听这种做法背后的原因。

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2012-07-20 04:49:24

REST本身可能不是一个标准,但阅读一般的REST文档和博客文章应该会给你一些指导,让你找到一种好的方法来构建API。大多数rest API往往只在路径中包含资源名称和资源in。例如:

代码语言:javascript
复制
/departments/{dept}/employees/{id}

一些REST使用查询字符串进行过滤、分页和排序,但由于REST不是一个严格的标准,我建议您检查一些REST API,如githubstackoverflow,看看哪些可以很好地适用于您的用例。

我建议将任何必需的参数放在路径中,并且任何可选的参数都应该是查询字符串参数。在尝试编写匹配不同组合的URL处理程序时,将可选参数放入路径将会变得非常混乱。

票数 286
EN

Stack Overflow用户

发布于 2012-07-19 09:14:10

这就是我要做的。

如果有一个基于id检索记录的场景,例如,您需要获取id为15的员工的详细信息,那么您可以使用@PathParam获取资源。

代码语言:javascript
复制
GET /employee/{id}

如果您需要获取所有员工的详细信息,但一次只需要获取10个员工的详细信息,则可以使用query param

代码语言:javascript
复制
GET /employee?start=1&size=10

这说明开始的员工id 1得到10条记录。

总而言之,使用@PathParam进行基于id的检索。User @QueryParam用于筛选器,或者如果您有用户可以传递的任何固定选项列表。

票数 106
EN

Stack Overflow用户

发布于 2013-04-03 22:00:25

我认为,如果参数标识了特定的实体,则应该使用path变量。例如,要获取我博客上的所有帖子,我请求

代码语言:javascript
复制
GET: myserver.com/myblog/posts

要获得id = 123的帖子,我将请求

代码语言:javascript
复制
GET: myserver.com/myblog/posts/123

但要过滤我的帖子列表,并获取自2013年1月1日以来的所有帖子,我会请求

代码语言:javascript
复制
GET: myserver.com/myblog/posts?since=2013-01-01

在第一个示例中,“post”标识了一个特定的实体(博客文章的整个集合)。在第二个例子中,"123“还代表一个特定的实体(单个博客帖子)。但在最后一个示例中,参数“last =2013-01-01”是一个过滤帖子集合的请求,而不是一个特定的实体。分页和排序将是另一个很好的例子,即

代码语言:javascript
复制
GET: myserver.com/myblog/posts?page=2&order=backward

希望这能有所帮助。:-)

票数 49
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11552248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档