我不是在问这里已经问过的问题: @PathParam和@QueryParam有什么区别
这是一个“最佳做法”或约定俗成的问题。
当你使用@PathParam
VS @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) ;
与 /category/instance
@GET
@Path("/employee/{dept}/{id}")
Patient getEmployee(@PathParam("dept")Long dept, @PathParam("id")Long id) ;
与 ?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,例如github和stackoverflow,然后看看哪种方法可以很好地满足你的用例。
我建议将任何必需的参数放在路径中,任何可选参数当然应该是查询字符串参数。尝试编写匹配不同组合的URL处理程序时,将可选参数放在路径中最终会变得非常混乱。
“我建议在路径中放置任何必需的参数,并且任何可选参数当然应该是查询字符串参数。 ”-赞+1是def
如果此约定也应用于Put请求,可以说我们要更新db实体的特定版本,URI是
PUT /depatments/{dept}/employees/{id}/{version}
,版本是可选的,还是 URIPUT /depatments/{dept}/employees/{id}?version=12
和版本是可选的在这种情况下,我建议:-
PUT /depatments/{dept}/employees/{id}/versions/{version}
创建具有所选版本POST /depatments/{dept}/employees/{id}/versions
的员工- 创建具有由后端确定的版本的员工