34

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

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

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

4

3 回答 3

33

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

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

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

另一种减少有效负载的方法是只请求资源表示的某些部分。以下是 Facebook 的做法:

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

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

我强烈建议您观看apigee关于 RESTful API 设计的演示文稿(截屏视频称为“Teach a Dog to REST”)。那里讨论了解决日常问题的良好做法和巧妙的想法。

编辑:自从我发布此答案以来,该视频已多次更新,您可以查看2013 年 1 月的第 3 版

于 2012-07-30T16:07:29.100 回答
6

通常有不同的方法可以提高 API 性能,包括大型 API。这些主题中的每一个都可以深入探讨。

  • 减小分页大小
  • 使用超媒体组织
  • 模式过滤正是用户所需要的
  • 使用首选标头定义特定响应
  • 使用缓存做出响应
  • 通过压缩提高效率
  • 用分块响应分解事情
  • 切换到提供更多流式响应
  • 与 HTTP/2 一起前进

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

于 2019-11-01T13:58:35.060 回答
1

如果您使用的是.net core,您必须尝试这个神奇的包

Microsoft.AspNetCore.ResponseCompression

configureservices然后在启动文件中使用这一行

services.AddResponseCompression();

然后在configure功能

app.UseResponseCompression();

于 2020-04-30T20:21:11.530 回答