关于REST约定的问题:检索需要大量参数的信息

时间:2011-01-12 00:07:19

标签: rest

我的服务器/ registered_contacts上有一条路由,它将一长串id作为参数,查找哪些ID在数据库中注册,然后返回该子集。

这应该是哪种HTTP方法?

这是一个GET请求,因为我认为它是GET的东西,但随后我对一长串的id也有点不安,最终向端点发出请求,如:

www.server.com/registered_contacts?ids[2]=bob&ids[54]=jon&ids[23]=jack...etc. etc.

有人可能会说我实际上并没有得到像/ registered / contacts / 42这样的远程“东西”,人们也可以说它是一种我既不更新,删除或创建的资源......所以离开了?

(有一点担心我还有一个标题大于数据包大小,不确定这是否成为一个问题)

2 个答案:

答案 0 :(得分:4)

假设您没有运行某些确实存在的GET命令长度限制,那么您没问题。

另一种机制是采用您的标准,将其发布到“过滤器”资源,然后从中获取生成的URI,然后使用该URI作为GET的参数。

Create the filter:
POST /filter

ids[2]=bob......

Result:
HTTP/1.1 301 Moved Permanently
Location: /filter/1234

Use the filter:
GET /registerd_contacts?filter=http://example.com/filter/1234

您的过滤器是一流的资源,如果您愿意,您可以CRUD,或者他们可以在一天内“离开”或任何您想要的。

答案 1 :(得分:2)

不,GET是正确的方法。您实质上是基于一长串标准生成搜索结果。你的方法(从语义上讲)是幂等的,这就是为什么它不适合POST。