2012-05-02 44 views
13

QueryParam和PathParam在使用方面有什么区别?Java RESTful服务 - QueryParam和PathParam在使用方面有什么区别?

我知道数据可以通过两者传递给服务。 PathParam是数据先行?在URL和QueryParam中是?之后的名称值数据。但我想知道这些是如何使用的。

+0

你的问题更多的是关于* how * each的用法,或者当*(即在什么情况下)时,你真的会问*什么时候将某些东西编码为路径的一部分vs作为查询参数? –

+0

Kevin,我的意思是问我什么时候应该将somthing作为路径的一部分,并作为查询参数进行编码?在此先感谢.. – Anil

+0

我现在更感兴趣知道何时应该将某些内容作为路径参数的一部分进行编码,并将其作为查询参数进行编码。 – Anil

回答

4

在实践中,这个问题可能没有一个正确的答案,因为在“野外”使用中有很多不同的URL方案。不过,从REST URL处理的角度来看,一个有用的方法来看待它。在REST(REpresentational State Transfer)中,这个想法是能够唯一地标识你想要访问的每个资源。在一个通用的REST方案中,URL的路径部分可以被认为是N空间中的一组坐标(即,x,y,z => // myApp/x/y/z),并且查询参数是更多说明符。这些进一步的说明符可以用作不完整路径规范的搜索条件,以返回匹配资源的列表。

有关REST URL的更多示例,请参阅following question

编辑: @marcok拥有优秀的技术答案,但更新后的评论暴露,你似乎更感兴趣的是,当选择了另一种。通常,如果您打算创建“纯粹的”RESTful API,那么属于该路径的任何内容都应该根据其身份唯一标识资源。通常,这可能会让您的URL以ID值结尾,作为唯一标识资源的路径的一部分。但是,如果您的API直接公开按照属性(可能不包括ID)搜索/过滤的能力,那么您将更可能将其作为查询参数进行编码。

这些仅仅是一些例子,对于什么需要一个好的API有更多的不同意见,更具体地说,API是如何实现纯粹的RESTful的。

41

@QueryParam用于访问URL的查询字符串(?之后的部分)中的键/值对。例如,在url http://example.com?q=searchterm中,可以使用@QueryParam("q")来获得值q

@PathParam用于匹配部分URL作为参数。例如,在形式为http://example.com/books/{bookid}的网址中,您可以使用@PathParam("bookid")来获取图书的ID。

有关JAX-RS中使用的示例,请参阅this page

+0

相关问题。希望它能帮助别人。 http://stackoverflow.com/questions/25037347/server-side-j2ee-webservice-gets-null-values-on-parameters/25038686#25038686 – Siddharth

相关问题