在REST GET请求中传递大量数据

时间:2019-06-20 23:52:31

标签: rest get

一个REST问题。假设我有一个数据库,其中将包含一百万个项目。我想通过REST GET检索说其中的10,000个,并在GET请求中传递10,000个项目的ID。使用URL请求查询参数,它将很快超过URL的最大长度。人们如何解决这个问题?改用POST并将其传递给正文?好像很黑。

1 个答案:

答案 0 :(得分:0)

您不应通过URL参数处理此表单,该表单有限制:2000个字符 Url limit

我想你在做什么是这样的

https://localhost/api/applicationcollections/(47495dde-67d2-4854-add0-7e25b2fe88e4,1b470799-cc8a-4284-9ca7-76dc34a5aebb)

如果您打算获得超过1万条记录,则可以将信息传递到没有任何限制的请求正文中。从技术上讲,您应该通过POST请求来执行此操作,但这不是POST动词的语义的意图。即使对于GET,您也可以包含主体:HTTP GET with request body,但不应将其视为语义的一部分。

通常,您不按ID过滤10k个元素,而是在请求上获得10k个元素,如果希望通过URL传递分页参数,但这会杀死您的应用程序,尤其是考虑到DTO的数量超过了一个字段,例如

ApplicationDto
 field1
 field2....
 field15

下面是一个如何传递分页参数并获取前10k条记录的示例

https://localhost:44390/api/applications?pageNumber=1&pageSize=10000

此外,API还应返回一个额外的标头,将其称为X-Pagination,如果您要分页的页面更多(包括元素总数),则可以在其中获取信息。

作为减少请求大小的额外努力,您可以调整数据形状并仅获取所需的字段。 ApplicationDto应该仅带:field1,field3参见下面:

https://localhost:44390/api/applications?fields=field1,field3

看看Twitter也如何解决这个问题: Twitter cursor response

希望这会有所帮助