前端一个页面依赖多个接口解决之node接口聚合

ops/2025/2/21 7:56:16/

首先先介绍一下页面的接口请求处理:

接口请求之间是否存在依赖性,主要有两种处理方式:

  1. 并行请求: 当这些接口彼此之间互不依赖时,可以同时发起多个请求。这时可以使用 Promise.all([…]) 来处理,这样可以提高页面加载的速度。以下是代码示例:
  Promise.all([ fetch(api1), fetch(api2), fetch(api3) ]).then(function (responses) {return Promise.all(responses.map(function (response) {return response.json();}));}).then(function (data) {console.log(data[0]);  // api1的返回数据console.log(data[1]);  // api2的返回数据console.log(data[2]);  // api3的返回数据}).catch(function (error) {console.log(error);});
  1. 串行请求: 如果这些接口之间存在依赖关系,如接口 B 需要接口 A 的返回数据来发送请求,那这时就需要按一定顺序依次发起这些请求,可以使用 async/await 来确保接口请求的顺序。以下是代码示例:
  async function fetchAllApis() {const response1 = await fetch(api1);const data1 = await response1.json();const response2 = await fetch(api2 + data1.key);const data2 = await response2.json();const response3 = await fetch(api3 + data2.key);const data3 = await response3.json();console.log(data1, data2, data3);}fetchAllApis().catch(e => console.error(e));

无论采取哪种方式,都需要进行错误处理,即便某一个或某些接口请求失败,也要使网页尽可能地正常工作。

在 Node.js 中,解决前端页面依赖多个接口的问题,有一种非常有效的解决方案——接口聚合,也就是我们经常说的 BFF(Backend For Frontend)架构。

在 BFF 架构中,我们可以在 Node.js 中创建一个专门为前端提供服务的层,将多个后端接口聚合成一个接口。这样,前端只需要发送一次请求,就能获取所有需要的数据,既减少了网络延迟,也降低了前端代码的复杂度。

实现 BFF 接口聚合的方式主要有两种:

  1. 在 BFF 层进行数据聚合: 通过 Node.js 的异步操作(如 Promise 或 async/await)调用多个后端接口,然后将这些接口的数据进行组合或转换,最后将处理后的数据返回给前端

  2. 在后端进行响应聚合: 这种方式是在服务端通过 API 网关或代理的方式来实现数据聚合,将多个后端接口的响应进行集中处理,然后返回给前端。这样 BFF 只需发送一次请求,后端服务层会负责处理所有接口的数据聚合。

示例:

const express = require('express');
const axios = require('axios');
const app = express();app.get('/aggregated-data', async (req, res) => {try {const [res1, res2, res3] = await Promise.all([axios.get(api1),axios.get(api2),axios.get(api3)]);res.send({data1: res1.data,data2: res2.data,data3: res3.data,});} catch (error) {console.error(error);res.status(500).send({ error: 'Error occurred while fetching data' });}
});app.listen(3000);

在此代码中,我们创建了一个 Express 服务器,并定义了一个 /aggregated-data 路径的 GET 请求。当接收到此请求时,我们会一次发起三个不同的 API 请求,并使用 Promise.all 等待所有的请求完成。然后,我们将这三个请求的响应数据组合在一起,最后以 JSON 格式发送给前端

这样,前端只需要发送一个请求至 /aggregated-data,即可得到所有需要的数据。

以上就是文章全部内容了,如果喜欢这篇文章的话,还希望三连支持一下,感谢!


http://www.ppmy.cn/ops/45540.html

相关文章

Python魔法之旅-魔法方法(04)

目录 一、概述 1、定义 2、作用 二、主要应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类…

android 在onCreate方法中获得view的宽高

view在绘制完成后才会有自己的宽高,所以在onCreate中要获得view的宽高可以通过以下4中方法: 1、ViewTreeObserver:监听界面绘制事件,在layout时调用,使用完毕后记得removeListener 2、view.post,因为runn…

linux中基于docker安装RabbitMQ。

在线获取安装包: docker pull rabbitmq:3.8-management(3.8-management版本号)。 切换目录后使用命令加载镜像即可: docker load -i mq.tar 安装镜像(黏贴复制命令时,不腰复制黏贴注释,#只是为了…

elasticsearch有什么用

Elasticsearch是一个开源的分布式搜索和分析引擎,它被广泛用于构建实时的、可扩展的搜索和分析应用程序。以下是Elasticsearch的主要用途和功能:12 全文搜索:Elasticsearch提供强大的全文搜索功能,可以处理大量的文本数据&…

基于大数据的高校生源可视化分析系统

基于大数据的高校生源可视化分析系统 “A Visual Analysis System for Higher Education Student Enrollment based on Big Data” 完整下载链接:基于大数据的高校生源可视化分析系统 文章目录 基于大数据的高校生源可视化分析系统摘要第一章 引言1.1 研究背景1.2 研究目的1.…

设计模式八股文

什么是设计模式? 设计模式是软件开发过程中经常遇到的问题的通用解决方案。类似于前人总结的经验,遇到相似问题的时候有个参考。 设计模式七大基本原则? 单一职责:一个类应该只作一件事情。将功能分为小的独立的单元。开放封闭…

【quarkus系列】创建quarkus第一个应用程序

文章目录 序言环境准备创建项目项目分析程序代码构建访问项目 序言 Quarkus 是一个设计用于 Kubernetes 和云原生环境的 Java 框架,具有快速启动时间、低内存消耗和强大的开发者体验。溪源将带您一步步创建一个简单的 Quarkus 应用程序。 环境准备 在开始之前&am…

MySQL表操作

目录 一、创建表 二、查看表 三、修改表 四、删除表 一、创建表 不指明字符集、校验规则、存储引擎则使用数据库默认的 create table 表名称(列名 数据类型,列名 数据类型,列名 数据类型 )character set 字符集 collate 校验规则 engine 存储引擎; 样例: cre…