Restful API - 处理大量数据

时间:2012-07-30 15:56:43

标签: web-services api rest

我编写了自己的Restful API,并且想知道处理从API返回的大量记录的最佳方法。

例如,如果我使用GET方法myapi.co.uk/messages/,这将为所有消息记录带回XML,在某些情况下可能是1000。这使得使用API​​非常迟缓。

任何人都可以建议处理此问题的最佳方法吗?批量返回结果并在请求中指定批量大小是否标准?

3 个答案:

答案 0 :(得分:15)

您可以更改API以包含其他参数,以限制应用程序返回的数据范围。

例如,您可以添加limitoffset参数来获取一小部分内容。这就是如何根据REST进行分页。这样的请求将导致从21到30日从消息集合中获取10个资源。通过这种方式,您可以要求提供大量数据集的特定部分:

myapi.co.uk/messages?limit=10&offset=20 

减少有效负载的另一种方法是仅询问资源表示的某些部分。这是facebook如何做到的:

/joe.smith/friends?fields=id,name,picture

请记住,在使用这些方法中的任何一种时,您必须为客户端提供一种发现每种资源的方法。您不能假设他们只是查看参数并开始更改它们以搜索数据。这将违反REST范式。为他们提供必要的超链接以避免它。

我强烈建议您按this presentation on RESTful API design查看apigee(截屏视频称为“教狗休息”)。在那里讨论了处理日常问题的良好做法和巧妙的想法。

编辑:自我发布此答案后,视频已多次更新,您可以查看3rd edition from January 2013

答案 1 :(得分:0)

通常可以通过多种方法来提高API性能,包括针对较大的API大小。每个主题都可以深入探讨。

  • 减少分页大小
  • 使用超媒体组织
  • 用户真正需要使用模式过滤
  • 使用首选标题定义特定的响应
  • 使用缓存进行响应
  • 通过压缩提高效率,提高效率
  • 用块状响应打破现状
  • 切换为提供更多流式响应
  • 使用HTTP / 2前进

来源:https://apievangelist.com/2018/04/20/delivering-large-api-responses-as-efficiently-as-possible/

答案 2 :(得分:0)

如果您使用的是.net core 您必须尝试使用​​此魔术包

Microsoft.AspNetCore.ResponseCompression

然后在启动文件的configureservices中使用此行

services.AddResponseCompression();

然后使用配置功能

app.UseResponseCompression();