如何使用模拟graphql API和外部服务的graphql端点

如何使用模拟graphql API和外部服务的graphql端点,graphql,next.js,react-apollo,Graphql,Next.js,React Apollo,我希望听到这里的专家们的一些意见。 我目前正在从事NextJS项目,我的graphql正在另一个repo中设置的模拟数据上运行。 现在后端是由其他开发人员构建的,他们正在慢慢地从模拟数据转移到真实数据。 他们给了我一个后端的端点,我应该在那里查询数据。 因此,我们的目标是使模拟graphql数据和后端中的真实数据并排工作,至少在我们完全删除模拟数据之前是这样。 到目前为止,我已经看到了两种实现方法,但我正在寻找一种仍然可以使用像useQuery和useMutation这样的钩子的方法 路#1 路

我希望听到这里的专家们的一些意见。 我目前正在从事NextJS项目,我的graphql正在另一个repo中设置的模拟数据上运行。 现在后端是由其他开发人员构建的,他们正在慢慢地从模拟数据转移到真实数据。 他们给了我一个后端的端点,我应该在那里查询数据。 因此,我们的目标是使模拟graphql数据和后端中的真实数据并排工作,至少在我们完全删除模拟数据之前是这样。 到目前为止,我已经看到了两种实现方法,但我正在寻找一种仍然可以使用像useQuery和useMutation这样的钩子的方法

路#1

路#2

伪代码:

  • 首先查询真实数据
  • 检查其是否为空,如果为空,则查询模拟数据
  • 如果两者都是空的,那么它实际上是一个空的结果集
  • 您可以在使用的钩子周围编写一个包装器来完成这项工作,这样您就不必在每个组件中重复自己。当您准备删除模拟数据时,只需删除第二次检查。数据集

    这是切换到新数据库时的常用技术

    require('isomorphic-fetch');
    fetch('https://graphql.api....', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ query: `
        query {
            popularBrands ( storefront:"bax-shop.nl", limit:10, page:1){
                totalCount
                items{id
                logo  
                name
                image
                }
              }
            }` 
        }),
    })
    .then(res => res.json())
    .then(res => console.log(res.data));
    
    const client = new ApolloClient({
        uri: 'https://api.spacex.land/graphql/',
        cache: new InMemoryCache()
    });
    async function test () {
        const { data: Data } = await client.query({
            query: gql`
              query GetLaunches {
                launchesPast(limit: 10) {
                  id
                  mission_name
                  launch_date_local
                  launch_site {
                    site_name_long
                  }
                  links {
                    article_link
                    video_link
                    mission_patch
                  }
                  rocket {
                    rocket_name
                  }
                }
              }
            `
          });
          console.log(Data)
    }