我正在使用JAXB / Jersey编写ReST服务。我想做不同的服务器端处理,并根据URL是否具有查询参数返回不同的响应。例如:
http://domain.com/Person
将映射到记录可用“人员”服务的页面,而
http://domain.com/Person?search="someName"
会返回查找人的结果。
我目前有一项约定,即用户可以通过请求基本网址(即http://domain.com/Person
,http://domain.com/Facility
)获取每种服务类别的使用/文档。此外,文档以XML,JSON,HTML或纯文本形式返回,具体取决于Content-Type
标题。
问题1:这是ReST服务的好设计吗? 问题2:如何根据URL是否具有查询参数将URL映射到不同的响应?
答案 0 :(得分:6)
我认为这不是一个好设计。假设URL指向一个资源,我不认为资源应该只有查询参数不同。您可以使用其他内容类型或附加网址。例如。 http://domain.com/Person
和http://domain.com/Person/search
没有。 JAX-RS不允许这种区分。区别是基于url本身(没有查询字符串)和生成/消费内容类型。
答案 1 :(得分:3)
作为替代方案,我会考虑:
http://domain.com/service/People
- 服务说明
http://domain.com/People
- 列出所有人
http://domain.com/People?search=someName
- 根据搜索条件列出所有人
http://domain.com/People/1234
- 列出特定人员
逻辑上,呈现的资源现在更加一致。这意味着,如果您的搜索可以返回多个人,则/ People中的资源仍然是人员列表。
/ People表示的资源不是服务描述,而是实际的人。因此,为什么我会把它拉到另一个URL。