设计REST API,搜索请求可以在其中获取多个查询的参数

时间:2016-06-30 20:40:12

标签: rest spring-boot

我必须设计一个REST API,其中搜索请求可以获取多个查询的参数(即,当客户端使用此API进行调用时,他应该能够发送参数以形成< strong>多个查询)。

我们有一个现有的API,我们正在使用 GET ,它需要多个参数一起构成一个查询,然后此API调用将返回此查询的响应。 例如目前我可以在请求中传递firstName,lastName,age等,然后取回该人。

但是现在我必须增强这项服务(或有一个单独的服务),我应该能够将firstName1,lastName1,age1等参数发送到搜索person1; firstName2,lastName2,age2搜索person2,依此类推。

我应该使用 POST 作为新API,然后发送参数列表(query1的参数,查询2的参数等)? 或者有更好的方法。

我们正在使用Spring Boot实现REST。

4 个答案:

答案 0 :(得分:0)

这里最好的做法是 POST ,然后返回一个 JSON 对象,其中包含数组中Person的所有详细信息。

这样会更快,你不必处理 GET 的长网址。

此外,GET对请求的长度有限制,而 POST 则没有此限制。

答案 1 :(得分:0)

最好使用POST,因为GET适用于2,3参数,但是当你有一组参数或对象时,POST就是好的。

答案 2 :(得分:0)

这里真的很难给出正确答案。通常,发送 GET 请求确实具有以下优势:您可以在HTTP级别轻松利用缓存,例如通过使用清漆,nginx等产品。但是,如果您已经预见到包含所有参数的URL,您必须发送 POST 请求以使其在所有浏览器中都有效。

答案 3 :(得分:0)

RESTfull架构应该尊重可寻址性的原则。

由于可以通过唯一请求访问多个用户,因此理想情况下,此用户组应获取一个地址,该地址会将其标识为资源。 但是我知道在现实世界中,URI的长度有限(maximum length of HTTP GET request?)。 POST请求确实会运行良好,但我们失去了可寻址性的好处。

另一种方法是公开新资源:group,。 让我们假设您当前的模型是这样的:

.../users/{id}
.../users/search?{arg1}={val1};{arg2}={val2}

你最终可以这样做:

.../users/groups/
.../users/groups/{id}
.../users/search?group={id}

(以下说明)

然后你可以将你的研究分成两部分:

  • 首先在... / users / groups /上发布POST,如其他响应所建议的,搜索参数的JSON描述。此请求可以扫描... / users / groups /目录,如果这组参数存在,则返回相应的地址... / users / groups / {id}。 (对于性能问题,您可以使用第一部分来定义{id},该部分将提供所请求的用户数量。)
  • 然后你可以用这样的GET请求这个组:... / users / search?group = {id}。

这种方法实现起来会有点复杂,但与面向资源的范例更为一致。