不同的数据源如何解析GraphQL查询?
创始人
2025-01-08 19:00:26
0

可以使用数据源解析器来解决这个问题。数据源解析器是一个在GraphQL执行过程中拦截请求并检索数据的中间件。我们可以将多个数据源绑定到同一个GraphQL Schema上,并使用数据源解析器来将查询分解成多个独立的请求并将结果合并。

以下是一个示例代码,演示如何将具有不同类型的数据源(数据库和Rest API)绑定到同一个GraphQL Schema上:

const { ApolloServer, gql } = require('apollo-server');
const { RESTDataSource } = require('apollo-datasource-rest');
const { Pool } = require('pg');

const typeDefs = gql`
  type Book {
    id: ID!
    title: String!
    author: String!
  }

  type Query {
    book(id: ID!): Book
  }
`;

class BookAPI extends RESTDataSource {
  constructor() {
    super();
    this.baseURL = 'https://myrestapi.com/';
  }

  async getBook(id) {
    return this.get(`book/${id}`);
  }
}

const resolvers = {
  Query: {
    book: async (_, { id }, { dataSources }) => {
      const [apiData, dbData] = await Promise.all([
        dataSources.bookAPI.getBook(id),
        dataSources.db
          .query('SELECT * FROM books WHERE id = $1', [id])
          .then((res) => res.rows[0]),
      ]);
      return {
        id,
        title: apiData.title,
        author: dbData.author,
      };
    },
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
  dataSources: () => ({
    bookAPI: new BookAPI(),
    db: new Pool({ connectionString: 'postgres://localhost:5432/mydb' }),
  }),
});

server.listen().then(({ url }) => {
  console.log(`� Server ready at ${url}`);
});

在上面的示例中,我们实现了一个包含一个book查询的GraphQL Schema,并使用ApolloServer将它们绑定在一起。我们将具有

相关内容

热门资讯

玩家亲测"河洛杠次怎... 河洛杠次怎么提高胜率是一款专注玩家量身打造的游戏记牌类型软件,在河洛杠次怎么提高胜率这款游戏中我们可...
推荐一款"福建天天开... 推荐一款"福建天天开心辅助器真的假的"开挂(插件)辅助插件竟然有挂-力荐教程您好:福建天天开心辅助器...
重要通知"微乐家乡麻... 重要通知"微乐家乡麻辣自建房辅助app"开挂(神器)辅助神器有挂教程-AA德州教程 了解更多开挂安装...
实测教程"广东雀神智... 实测教程"广东雀神智能插件智能价格"开挂(下载)辅助下载有挂攻略-技巧教程;亲,广东雀神智能插件智能...
大家学习交流"西兵辅... 大家学习交流"西兵辅助器"开挂(透视)辅助透视有挂工具-线上教程;无需打开直接搜索薇:1367043...
分享一款"新西游拼十... 分享一款"新西游拼十辅助器"开挂(安装)辅助安装今日头条-必备教程 【无需打开直接搜索加薇13670...
分享一款"创思维激k... 分享一款"创思维激k辅助插件"开挂(脚本)辅助脚本有挂分享-线上教程创思维激k辅助插件ai黑科技系统...
1.9分钟了解"有哪... 【亲,有哪些免费的wpk辅助码 这款游戏可以开挂的,确实是有挂的,很多玩家在这款有哪些免费的wpk辅...
今日百科"茶馆辅助软... 今日百科"茶馆辅助软件"开挂(下载)辅助下载有挂方针-科技教程 >>您好:软件加薇136704302...
必知教程"决战十三辅... 必知教程"决战十三辅助器"开挂(透视)辅助透视有挂解惑-2026新版技巧 了解更多开挂安装加(136...