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


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

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

    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,即可得到所有需要的数据。

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

  • 相关阅读:
    运动与健康
    Vue指令v-show和v-if的区别
    3.5 Windows驱动开发:应用层与内核层内存映射
    [C#] GDI+ 之鼠标交互:原理、示例、一步步深入、性能优化
    2022软件测试面试题 最新字节跳动50道真题面试题 刷完已拿下15k 附讲解+答疑
    MS31804四通道低边驱动器可替代DRV8804(串行数据接口控制,4个低边功率驱动,内置高侧续流二极管)
    回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测
    指针进阶(详解)
    前后端交互常见的几种数据传输格式 form表单+get请求 form表单+post请求 json键值对格式
    linux查看端口占用情况
  • 原文地址:https://blog.csdn.net/weixin_43891869/article/details/139253117