You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apollo网关如何为子图添加动态自定义请求头?

为Apollo Gateway子图添加自定义请求头

完全可行,你可以利用buildService方法中获取到的子图name参数,为不同子图注入专属的自定义请求头。只需修改willSendRequest逻辑,根据子图名称判断并添加对应的请求头即可。

修改后的完整代码如下:

const { ApolloGateway, IntrospectAndCompose, RemoteGraphQLDataSource } = require("@apollo/gateway");

const gateway = new ApolloGateway({
    supergraphSdl: new IntrospectAndCompose({
      subgraphs: [
         { name: "users-api", url: `users.private/graphql?` },
         { name: "cars-api", url: `cars.private/graphql?` },
         { name: "posts-api", url: `posts.private/graphql?` }
      ],
    }),
    buildService({ name, url }) {
      return new RemoteGraphQLDataSource({
        url,
        willSendRequest({ request, context }) {
          // 保留原有传递上下文请求头的逻辑
          Object.keys(context.headers || {}).forEach(key => {
            if (context.headers[key]) {
              request.http.headers.set(key, context.headers[key]);
            }
          });

          // 根据子图名称添加自定义请求头
          switch(name) {
            case "users-api":
              request.http.headers.set("service", "users");
              break;
            case "cars-api":
              request.http.headers.set("service", "cars");
              break;
            // 可按需为其他子图添加规则,或留空不处理
            case "posts-api":
              break;
          }
        },
      });
    },
});

关键逻辑说明

  1. buildService方法会为每个子图单独创建数据源实例,可直接获取当前子图的name标识
  2. 在willSendRequest钩子中,先执行原有逻辑传递上下文请求头,再根据子图名称匹配添加专属的service请求头
  3. 可按需扩展switch语句,为更多子图配置不同的自定义请求头规则

内容的提问来源于stack exchange,提问作者Sean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:10:26