【布道API】关于 API 分页

简介: 随着消费者期望的提高,API 性能从未像今天这样重要。众所周知,如果网页加载时间超过 3 秒,超过半数的网络用户会放弃继续浏览网页。

随着消费者期望的提高,API 性能从未像今天这样重要。众所周知,如果网页加载时间超过 3 秒,超过半数的网络用户会放弃继续浏览网页。

这些期望不一定符合 API 的技术要求。在大数据整合和分析时代,API 在其后端处理的数据量比以往任何时候都多。为了在当今的数字经济中真正站稳脚跟,必须优化API 以实现最高效率。API 分页是确保 API 平稳有效运行的关键策略。

现在先看看什么是分页,然后将通过示例代码实现深入研究 API 分页。

什么是分页?

上搜索引擎搜索内容、上购物平台浏览商品、上新闻平台阅读新闻、上微博查阅评论等等场景都看到过分页的功能,不同场合有不同的方式,如常见的页码分页、滚到底部自动加载分页。

信息的分页在用户体验上减少用户流量,在应用性能上,为降低服务器压力。试想一下,从数据库中通过 API 查询可能会返回数百万甚至数十亿的结果,服务器及浏览都是灾难。

因此分页有助于限制结果的数量,以控制网络流量。

偏移分页

偏移分页是最简单的实现之一,一般是使用 limitoffset 命令实现的。偏移分页受使用数据库 SQL 的影响,limitoffset 包含在 SQL SELECT 库中。

API 请求使用 limitoffset 的协议如下:

GET /items?limit=20&offset=100

偏移分页几乎不需要编程,它在服务器端也是无状态的,无论自定义 sort_by 参数如何都可以工作。

偏移分页的缺点是在处理大偏移值时会出错。例如,如果将偏移量设置为 1000000,则 API 必须扫描一百万个数据库条目,然后将其丢弃。

偏移分页的另一个缺点是向表中添加新条目会导致混乱,这称为页面漂移。如下面这个场景:

  1. 从查询开始 GET /items/?offset=0&limit=20
  2. 向数据库添加 10 个新条目
  3. 再次执行相同的查询,这只会返回 5 个结果,因为向数据库添加 10 个条目会将偏移量移回 10,这可能会在客户端引起混乱。

键集分页

键集分页使用上一页的过滤器值来确定下一组项目,将这些结果编入索引。

如下这个例子:

  1. 客户请求最近的项目 GET /items?limit=20
  2. 单击下一页后,查询将查找最小创建日期 2021-09-01 00:00:00。然后,为下一页创建查询过滤器,GET /items?limit=20&created:lte:2021-09-01 00:00:00
  3. 等等……

这种方法的好处是它不需要额外的后端逻辑,只需要一个 limit 参数。它还具有一致的排序功能,即使将新项目添加到数据库中也是如此,对于较大的偏移值,它也能顺利工作。

搜索分页

搜索分页是键集分页之外的下一步,添加查询 after_idbefore_id,可以删除过滤器和排序的约束。唯一标识符比低基数字段(例如状态枚举或类别名称)更稳定。

搜索分页的唯一缺点是创建自定义排序顺序可能具有挑战性。

如下这个例子:

  1. 客户请求最近项目的列表 GET items?limit=20
  2. 客户端使用第一个查询的结果请求接下来 20 个项目的列表 GET /items?limit=20&after_id=20
  3. 客户端请求下一页/滚动页面,使用第二页的最后一个条目作为起点 GET /items?limit=20&after_id=40

搜索分页的好处:

  • 从分页逻辑中分离过滤器逻辑
  • 一致的排序,即使在新项目添加到数据库时也是如此,对最新添加的项目进行排序。
  • 即使偏移量很大,也能顺利工作。

性能优化

API 数据分页是基于降低数据传输流量来提高服务响应时间的方法。对于不同的分页方式,对服务器的访问性能也是不同的。不管后台使用什么语言,API 的分页大体可以分为两类:内存分页和数据源分页。

内存分页

这是比较的常见的分页方式,客户端通过API发起分页请求,服务器端接收到相应的请求然后构建 SQL 查询语言发送到数据库服务器并返回相应查询结果的数据集暂时存储在内存中,服务器端再在内存中将分页所需的数据响应给客户端。

常见的实现方式,简单,对于少量数据的分页查询效率还能接受,因为这种基于ORM机制的查询分页在转换过程中会损失性能影响效率,对于数据量比较大的情况下效率就有明显的下降。

数据源分页

从字面意思上理解就是在数据源头就返回分页需要的数据,通常是采用存储过程(通常存在于关系型数据库,如Sql Server 、 Mysql等)进行分页,在数据源头将分页数据整理好,在大数据量的情况下,效率还是很明显的。

总结

随着 API 越来越多地参与和复杂化,API 分页性能就变得更加重要。


相关文章
|
NoSQL API Redis
利用Redis对含有分页参数的API接口做调用次数限制
利用Redis对含有分页参数的API接口做调用次数限制
140 0
利用Redis对含有分页参数的API接口做调用次数限制
|
Web App开发 .NET API
使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【七】——实现资源的分页
原文:使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【七】——实现资源的分页 系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 这篇文章我们将使用不同的方式实现手动分页(关于高端大气上档次的OData本文暂不涉及,但有可能会在系列的后期介绍,还没确定。
1192 0
|
JavaScript API 前端开发
jQuery EasyUI API 中文文档 - 分页
Pagination 分页 用 $.fn.pagination.defaults 重写了 defaults。 依赖 linkbutton 用法 1.   1. $('#pp').pagination({   2.     total:2000,   3.     pageSize:10   4. });  特性 名称 类型 说明 默认值 total number 记录总数,应该在创建pagination时设置。
891 0
|
8天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
15天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。
|
27天前
|
安全 算法 API
产品经理必备知识——API接口
前言 在古代,我们的传输信息的方式有很多,比如写信、飞鸽传书,以及在战争中使用的烽烟,才有了著名的烽火戏诸侯,但这些方式传输信息的效率终究还是无法满足高速发展的社会需要。如今万物互联的时代,我通过一部手机就可以实现衣食住行的方方面面,比如:在家购物、远程控制家电、自动驾驶等等,背后都离不开我们今天要聊的API接口。
|
27天前
|
数据采集 JSON API
如何实现高效率超简洁的实时数据采集?——Python实战电商数据采集API接口
你是否曾为获取重要数据而感到困扰?是否因为数据封锁而无法获取所需信息?是否因为数据格式混乱而头疼?现在,所有这些问题都可以迎刃而解。让我为大家介绍一款强大的数据采集API接口。
|
30天前
|
安全 API 数据安全/隐私保护
API接口知识小结
应用程序接口API(Application Programming Interface),是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统(中后台系统)或后台不同系统之间的交互点。包括外部接口、内部接口,内部接口又包括:上层服务与下层服务接口、同级接口。
|
2天前
|
人工智能 API 开发者
免费使用Kimi的API接口,kimi-free-api真香
今年AI应用兴起,各类智能体涌现,但API免费额度有限。为解决这一问题,GitHub上的[kimi-free-api](https://github.com/LLM-Red-Team/kimi-free-api)项目提供了方便,支持高速流式输出、多轮对话等,与ChatGPT接口兼容。此外,还有其他大模型的免费API转换项目,如跃问StepChat、阿里通义Qwen等。该项目可帮助用户免费体验,通过Docker-compose轻松部署。只需获取refresh_token,即可开始使用。这个开源项目促进了AI学习和开发,为探索AI潜力提供了新途径。
127 2