如何在NestJs中为Amadeus API的hotels/by-city端点实现分页?
Amadeus hotels/by-city 无分页时的前端分页实现方案
方案一:全量获取后做分页(后端/前端处理均可)
- 适用场景:目标城市酒店数量不多(几百家以内),API返回数据量可控
- 实现步骤:
- 你的NestJs服务端先调用Amadeus API拉取该城市的全部酒店数据
- 后端处理:接收前端传的
page和pageSize参数,对全量数据做切片(比如data.slice((page-1)*pageSize, page*pageSize)),只返回当前页的数据 - 前端处理:直接把全量数据返回给前端,用前端框架自带的分页组件(比如AntD的Pagination、ElementUI的Pagination)渲染分页
- 利弊:
- 好处:代码逻辑简单,不用折腾额外的API调用
- 坏处:如果酒店数量上千,一次性拉取会拖慢首次加载速度,还可能触发Amadeus的API限流
方案二:用API筛选参数实现「伪分页」
- 适用场景:目标城市酒店数量多,全量拉取不现实
- 实现步骤:
- 利用Amadeus hotels/by-city支持的筛选参数(比如
starRating、priceRange、propertyCategory),把酒店拆成多个批次获取 - 在NestJs里存一个临时数据集,分批调用API拿不同筛选条件下的酒店,合并后再按前端的分页请求返回对应数据
- 举个例子:先拉5星酒店,再拉4星,直到把所有星级的酒店都拉完,再统一处理分页
- 利用Amadeus hotels/by-city支持的筛选参数(比如
- 利弊:
- 好处:避免一次性拉大量数据,减少带宽消耗和限流风险
- 坏处:要处理多批次API调用的异步逻辑,而且筛选条件可能没法覆盖所有酒店,存在漏数据的可能
方案三:缓存全量数据+后端分页
- 适用场景:酒店数据更新慢(比如每天更一次),前端分页请求频繁
- 实现步骤:
- 用NestJs的定时任务(
@nestjs/schedule)定期调用Amadeus API拉全量数据,存到Redis这类缓存服务里 - 前端发分页请求时,直接从缓存里取数据,处理分页后返回
- 设置缓存过期时间,定期更新保证数据不会太旧
- 用NestJs的定时任务(
- 利弊:
- 好处:首次加载后,后续分页请求响应快,还能减少对Amadeus API的调用次数
- 坏处:需要额外搭缓存服务,缓存更新期间可能出现数据不一致的情况
内容的提问来源于stack exchange,提问作者Muhammad Kashif
相关产品推荐
相关产品推荐

