我已经编写了自己的 Restful API,并且想知道处理从 API 返回的大量记录的最佳方法。
例如,如果我使用此GET
方法myapi.co.uk/messages/
将带回所有消息记录的 XML,在某些情况下可能是 1000 条。这使得使用 API 非常缓慢。
任何人都可以建议处理这个问题的最佳方法吗?批量返回结果并在请求中指定批量大小是否标准?
我已经编写了自己的 Restful API,并且想知道处理从 API 返回的大量记录的最佳方法。
例如,如果我使用此GET
方法myapi.co.uk/messages/
将带回所有消息记录的 XML,在某些情况下可能是 1000 条。这使得使用 API 非常缓慢。
任何人都可以建议处理这个问题的最佳方法吗?批量返回结果并在请求中指定批量大小是否标准?
您可以更改 API 以包含其他参数,以限制应用程序返回的数据范围。
例如,您可以添加limit
和offset
参数来获取一小部分。这就是根据 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 版
通常有不同的方法可以提高 API 性能,包括大型 API。这些主题中的每一个都可以深入探讨。
资料来源:https ://apievangelist.com/2018/04/20/delivering-large-api-responses-as-efficiently-as-possible/
如果您使用的是.net core,您必须尝试这个神奇的包
Microsoft.AspNetCore.ResponseCompression
configureservices
然后在启动文件中使用这一行
services.AddResponseCompression();
然后在configure
功能
app.UseResponseCompression();