gpt4 book ai didi

graphql - 如何从 2 个 API 查询数据

转载 作者:行者123 更新时间:2023-12-04 10:38:14 25 4
gpt4 key购买 nike

我已经设置了一个 Gatsby 客户端,它使用 gatsby-source-contentful 连接到 Contentful插入。我还连接了一个简单的自定义 API,它使用 gatsby-source-graphql 连接。插入。

  • 当我运行开发服务器时,我可以从 Playground 中的 Contentful 查询我的页面。
  • 我还可以通过 Playground 查询我的自定义 API。
  • 所以这两个 API 都可以正常工作并与 Gatsby 正确连接。

  • 我想以编程方式生成一堆具有动态部分(引用)的页面,作者可以根据需要添加和排序。

    我确实使用 ...on Node 来实现这一点与我在每个动态部分中定义的片段连接在一起。到目前为止一切都很好。

    我的实际问题:

    现在我有一个动态部分,它是一个 Joblist。该组件需要从 Contentful API 中获取数据,因为它存储纬度和经度等值。所以作者可以随意在 map 上设置一个点,设置一个半径。我使用组件内的片段成功地从 Contentful 中获取了这些信息:

    export const query = graphql `
    fragment JoblistModule on ContentfulJoblisteMitAdresse {
    ... on ContentfulJoblisteMitAdresse {
    contentful_id
    radius
    geo {
    lon
    lat
    }
    }
    }`

    但是我怎样才能将这些信息传递给另一个从我的自定义 API 中获取作业数据的查询呢?如果我正确理解 Gatsby,我必须以某种方式将这两个 API 连接在一起?或者我可以以某种方式运行另一个查询来获取这些作为变量传递的值吗?我将如何以及在哪里实现这一目标?

    我在 gatsby-node.js 中也找不到任何方法(因为传入的上下文只能用作查询中的变量),也不能在模板文件中(因为我一次只能运行 1 个查询),也不能在组件本身中(因为这只接受 staticQuery)

    我不知道我的误解在哪里。因此,我将非常感谢任何提示、帮助或示例。

    最佳答案

    由于您的自定义 API 是 graphQL API,您可以使用 delegateToSchema来自 graphql-tools包来实现这一点。

    您需要使用 Gatsby 的 setFieldsOnGraphQLNodeType 创建解析器API。在此解析器中,您的解析函数将调用 delegateToSchema .

    我们有一个类似的问题,我们的博客文章有一个包含 ID 的“作者”字段。然后,我们对另一个系统进行 graphQL 查询,以通过该 ID 查找作者信息。

    return {
    remoteAuthor: {
    type: person,
    args: {},
    resolve: async (source: ContentfulBlogPost, fieldArgs, context, info) => {
    if (!source.author) {
    return null
    }

    // runs the selection on the remote schema
    // https://github.com/gatsbyjs/gatsby/issues/14517
    return delegateToSchema({
    schema: authorsSchema,
    operation: 'query',
    fieldName: 'Person',
    args: { id: source.author },
    context,
    info,
    })
    },
    },
    }

    这会在我们的博客文章类型中添加一个 'remoteAuthor' 字段,并且每当它被查询时,这些选择都会被代理到远程模式,其中 person类型存在。

    关于graphql - 如何从 2 个 API 查询数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60062857/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com