在 Apollo 客户端中使用多个端点

Eug*_*ene 19 javascript apollo graphql next.js apollo-client

这是我在这里的第一篇讨论帖子。我通过奥德赛学到了Apollo+ 。目前,我正在使用Next.js构建自己的项目,该项目需要从 2 个GraphQL 端点获取数据。GraphQL

我的问题:如何使用GraphQL 从多个端点ApolloClient获取数据?

以下是我的第一个端点的代码:

import { ApolloClient, InMemoryCache, createHttpLink } from "@apollo/client";

const client = new ApolloClient({
  ssrMode: true,
  link: createHttpLink({
    uri: "https://api.hashnode.com/",
    credentials: "same-origin",
    headers: {
      Authorization: process.env.HASHNODE_AUTH,
    },
  }),
  cache: new InMemoryCache(),
});

export default client;
Run Code Online (Sandbox Code Playgroud)

小智 18

你想要完成的事情有点反对阿波罗的“一张图”方法。查看网关和联合 - https://www.apollographql.com/docs/federation/

话虽如此,一些黑客解决方案是可能的,但您将需要维护更复杂的结构并在每个查询中指定端点,这会破坏内置机制并可能导致优化问题。

//Declare your endpoints
const endpoint1 = new HttpLink({
    uri: 'https://api.hashnode.com/graphql',
    ...
})
const endpoint2 = new HttpLink({
    uri: 'endpoint2/graphql',
    ...
})

//pass them to apollo-client config
const client = new ApolloClient({
    link: ApolloLink.split(
        operation => operation.getContext().clientName === 'endpoint2',
        endpoint2, //if above 
        endpoint1
    )
    ...
})

//pass client name in query/mutation
useQuery(QUERY, {variables, context: {clientName: 'endpoint2'}})
Run Code Online (Sandbox Code Playgroud)

这个包似乎可以满足您的需求:https ://github.com/habx/apollo-multi-endpoint-link

另外,请查看此处的讨论:https ://github.com/apollographql/apollo-client/issues/84