具有多个参数的 RESTful Spring 服务
Posted
技术标签:
【中文标题】具有多个参数的 RESTful Spring 服务【英文标题】:RESTful Spring service with multiple parameters 【发布时间】:2011-12-20 16:32:10 【问题描述】:我正在构建一个安静的服务,它需要接受 任何 个参数,而不是下面示例中的 一个。
假设以下服务例程
@RequestMapping("/start/id/id", RequestMethod.GET)
public void startService(@PathVariable String id) ...
有一个基于RestTemplate
的客户端实现
restTemplate.getForObject("/start/id/id", null, id);
问题:但是考虑到可能有数千个ids
,我必须使用RestTemplate
在一个请求中发送所有参数的宁静方法是什么?我看过建议
RestTemplate
似乎不可能?
在 id 中使用分隔符(例如,id1|id2|....|idn
) - 看起来像 hack
先输入参数,然后发出 GET 来引用 id - 双重请求,似乎不直观
添加多个 URL 参数 (?id=foo&id=bar&.....&id=foobar
)
我知道以前有人问过类似的问题(calling-a-restful-service-with-many-parameters、how-to-create-rest-urls-without-verbs、can-you-build-a-truly-restful-service-that-takes-many-parameters),但我发现很难找到令人满意的答案,或者至少是基于RestTemplate
的答案。
【问题讨论】:
【参考方案1】:我认为 RESTful 设计的任何部分都没有说明您的 url 结构应该能够解析整个集合。您的第一个(请求参数)和第三个(url 参数)建议可能是最好的。
我会推荐第一个。我确定它在resttemplate中是允许的。查看您提供的文档,只需实现其中一种 post 方法。他们每个人都将请求作为参数。在里面,我确信有某种getRequestParameters()
方法的实现,您可以使用它从包含您的 ID 的请求正文中解析 json/xml。
或者,更好的是,所有这些 id 是如何相关的?他们都有共同的父资源吗?如果是这样,那么您可以(并且可能应该)执行类似...
/commonparent/parentId
然后在您的请求处理程序中,查询所有 id,然后像往常一样继续。
【讨论】:
【参考方案2】:您可以对所有 id 使用查询参数:
/search?ids=1,2,3,4,5,6,7
然后用逗号标记并进行搜索。请记住,如果您将其作为 GET 查询字符串参数发出,您将受到最大 URL 长度的限制。
【讨论】:
以上是关于具有多个参数的 RESTful Spring 服务的主要内容,如果未能解决你的问题,请参考以下文章
在RESTFUL风格中怎样定义需要多个参数才能确定的资源路径