我不是在问这里已经问过的问题:
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来区分他们的信息,就像我上面举例说明的那样。我也很想听听这种做法背后的原因。

    最佳答案

    REST可能不是这样的标准,但是阅读一般的REST文档和博客文章应该为您提供一些指导,以指导您构建API URL。大多数其余的API往往在路径中只有资源名称和资源ID。如:

    /departments/{dept}/employees/{id}
    

    某些REST API使用查询字符串进行过滤,分页和排序,但是由于REST不是严格的标准,因此我建议您检查一些REST API,例如githubstackoverflow,并查看哪种方法可以很好地满足您的用例。

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

    09-11 20:30