【问题标题】:How can I call a graphql lambda from another lambda in nodejs?如何从 nodejs 中的另一个 lambda 调用 graphql lambda?
【发布时间】:2020-09-15 06:33:29
【问题描述】:

我按照以下说明创建了 graphql lambda:https://www.apollographql.com/docs/apollo-server/deployment/lambda/ 它适用于 API 网关。但是,我需要从另一个 lambda 调用这个 lambda 函数。我想我需要将ApolloClient 放在另一个 lambda 函数中才能发送 graphql 请求。但是,它不起作用,因为我无法选择正确的链接来调用 lambda。 所以我正在寻找如何以编程方式构建 graphql 请求。我可以将请求作为事件发送以触发 graphql lambda。

有没有办法做到这一点?

例如,如果我有这样的突变请求:

 mutation sendMessage {
      sendMessage(text: "hello"){
      text
    }

我需要找到一种方法将请求转换为以下有效负载:

{"id":"1","type":"start","payload":{"variables":{},"extensions":{},"operationName":"sendMessage","query":"mutation sendMessage {\\n  sendMessage(text: \\"hello\\") {\\n    text\\n    __typename\\n  }\\n}\\n"}}

然后我将此有效负载发送到 graphql lambda 函数

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda graphql


    【解决方案1】:

    您可以使用 graphQL 客户端通过 API 网关端点使用 HTTP 执行 graphQL 请求。

    鉴于您有一个指向 graphQL 服务器的 API Gateway 端点,您可以从另一个 lambda 向该端点执行 graphQL 请求。

    对服务器的 GraphQL 查询只是以某种方式格式化的常规 POST 请求。因此,如果您愿意,您可以使用任何服务器端 HTTP 客户端来执行该请求。但是,使用像 graphql-request 这样的库会更简单。

    您可以使用graphql-request 包来执行服务器端的graphQL 请求。

    import { request } from 'graphql-request'
    
    const endpoint="https://your-api-gateway-endpoint";
    
    const headers = {
      "x-api-key": 'api-gateway-key' // if your endpoint requires API key
    };
    
    const client = new GraphQLClient(endpoint, { headers });
    
    const query = `{
      mutation sendMessage {
          sendMessage(text: "hello"){
          text
      }
    }`;
    
    const data = await client.request(query);
    console.log(JSON.stringify(data, undefined, 2));
    
    

    【讨论】:

    • 我考虑过这个解决方案,但它会给请求带来更多延迟。它将请求发送到 API 网关,网关将其转发给不太好的 lambda。有没有办法在 lambda 中生成 graphql 请求负载,并直接发送给 graphql lambda?
    • 我不认为使用 lambda 调用是一个好主意,即使它是可能的。由于您的客户端 lambda 将一直运行到您的服务器 lambda,您将为更高的 lambda 使用付费。延迟以毫秒为单位,所以我不会担心。
    猜你喜欢
    • 2020-03-04
    • 2023-01-12
    • 2021-06-02
    • 2021-05-12
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 2019-12-15
    • 2016-12-31
    相关资源
    最近更新 更多