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