如何在 API 设计中执行分页
共 3356字,需浏览 7分钟
·
2024-06-11 17:34
在 API 设计中,分页对于高效处理大型数据集和提高性能至关重要。以下是六种常用的分页技术:
01 基于偏移的分页
这种技术使用 offset 和 limit 参数来定义起点和要返回的记录数。
例如:
GET /orders?offset=0&limit=3
-
优点:易于实现和理解。 -
缺点:由于需要扫描和跳过记录,因此偏移量较大时效率可能会降低。
02 基于游标的分页
这种技术使用游标(cursor)来标记数据集中的位置。通常,游标是一个指向特定记录的编码字符串。
例如:
GET /orders?cursor=xxx
-
优点:对大型数据集来说更有效,因为它不需要扫描跳过的记录。 -
缺点:实施和理解起来稍显复杂。
03 基于页面的分页
这种技术指定每页的页码和大小。
例如:
GET /items?page=2&size=3
-
优点:易于实现和使用。 -
缺点:对于大页码,存在与基于偏移的分页类似的性能问题。
04 基于 keyset 的分页
这种技术使用 key 来过滤数据集,通常是主键或其他索引列。
例如:
GET /items?after_id=102&limit=3
-
优点:适用于大型数据集,效率高,可避免因偏移量大而产生的性能问题。 -
缺点:需要唯一且有索引的键,实现起来可能比较复杂。
05 基于时间的分页
这种技术使用时间戳或日期对记录进行分页。
例如:
GET /items?start_time=xxx&end_time=yyy
-
优点:适用于按时间排序的数据集,确保在添加新记录时不会遗漏记录。 -
缺点:需要可靠一致的时间戳。
06 混合分页
这种技术结合了多种分页技术,以发挥它们的优势。
例如,将基于游标的分页和基于时间的分页相结合,以高效滚动浏览按时间排序的记录。
例如:
GET /items?cursor=abc&start_time=xxx&end_time=yyy
-
优点:可为复杂数据集提供最佳性能和灵活性。 -
缺点:实施起来比较复杂,需要精心设计。
上述每种技术都有其优点和利弊,分页方法的选择取决于具体的使用情况、数据集特性以及 API 的性能要求。
以上内容源自公众号“ByteByteGo”,是硅谷百万粉丝技术大v、《搞定系统设计:面试敲开大厂的门》一书作者Alex Xu的官方号。
关于系统设计的面试,可以说是所有技术面试中最难的。
面试者会被要求设计一个软件系统,比如news feed、谷歌搜索、聊天系统等。
这些问题令人望而生畏,没有特定的解题模式,通常范围都非常广且模糊,其答案也是开放的,也可以说不存在标准答案或正确答案。
很多公司都设有系统设计面试,因为这种面试能考验软件工程师日常工作所需的沟通能力和解决问题的能力。
面试官会考查候选人如何分析一个模糊的问题并一步步解决这个问题;同时,他们还会考查候选人阐述自己想法的能力、与其他人讨论的能力、评估及优化系统的能力。
系统设计的问题是开放式的。
在现实世界中,不同的系统之间存在许多差别,而系统自身还要应对各种变化。
面试官期望得到的答案是一个能满足系统设计目标的架构。
在面试过程中,对问题的讨论可能会因面试官的个人风格不同而走向不同的方向。
有些面试官喜欢询问高层架构设计方面的问题,以全面地考查面试者的知识面,也有些面试官会选择一个或者几个领域来深入地考查知识点。
一般来说,应该搞清楚系统的需求、限制和瓶颈,以便面试双方可以有效地进行沟通。
Alex所著《搞定系统设计:面试敲开大厂的门》一书的目标是提供一个可靠的策略,帮助面试者回答系统设计问题。采取正确的策略且具备必要的知识,对面试的成功至关重要。
本书讲述了构建一个可扩展系统所需的基础知识。你从本书中获得的知识越多,在解决系统设计问题时就越从容。
本书还提供了一个逐步解决系统设计问题的框架,用了很多实例来阐释这种系统性的解决方法且附有详细步骤,你可以照着操作。只要勤加练习,在回答系统设计面试问题时,你就会胸有成竹。
本书原著豆瓣评分8.4,得到众多读者的好评,案例经典、信息全面系统、非常适合用来面试!
如果你想顺利通过高难度的系统设计面试,那就看看这本被众多读者验证过的好书吧~~
↑限时五折优惠↑
限时五折优惠,快快抢购吧!
发布:刘恩惠
审核:陈歆懿
如果喜欢本文 欢迎 在看丨留言丨分享至朋友圈 三连 < PAST · 往期回顾 >
书单 | 5月新书速递!