当前位置: 首页 > 知识库问答 >
问题:

通过AWS appsync向graphql服务器发送代理请求

毕魁
2023-03-14

我的一个EC2实例上有一个graphql服务器正在运行。我也有AWS appsync运行,但目前它只与几个Lambda集成。

我想将我的Appsync连接到graphql服务器,这样Appsync将作为特定查询/变化的代理。

因此,从客户端来看,它将如下所示:

  • 客户端将一个查询发送到APPESNC,让我们假设它看起来像这样:
{
  user {
    id
  }
} 
  • Appsync已经定义了一个用户查询,它被配置为在graphql服务器上代理查询,没有任何更改
{
  user {
    id
  }
} 

并返回一个结果:

"data": {
  "user": {
    "id": "123456789"
  }
}
  • 最后,Appsync代理将响应返回到客户端

我是否能够以给定场景可能的方式配置Appsync?它是使用Appsync的正确模式吗?

我能够通过AppSync代理我的请求,并通过以下解析器配置到达我的Graphql服务器:

{
    "version": "2018-05-29",
    "method": "POST",
    "resourcePath": "/graphql",
    "params":{
        "body": {
          "query": "$util.escapeJavaScript($ctx.info.getSelectionSetGraphQL())"
        }
    }
}

但这仍然没有达到预期效果-它与文档中的描述不同,我至少看到两个问题:

  1. 如果我有一个带有参数和嵌套paylod的查询,$ctx。信息。getSelectionSetGraphQL()去掉查询名称和参数部分,只给我嵌套的负载,因此此查询:
{ 
  user(id: "1") {
    picture {
      url
    }
}

一旦我调用$ctx,就会变成下面的一个。信息。getSelectionSetGraphQL()

{
   picture {
     url
   }
}

但我想使用整个查询,如文档中所述:

"selectionSetGraphQL": "{\n  getPost(id: $postId) {\n    postId\n    title\n    secondTitle: title\n    content\n    author(id: $authorId) {\n      authorId\n      name\n    }\n    secondAuthor(id: \"789\") {\n      authorId\n    }\n    ... on Post {\n      inlineFrag: comments {\n        id\n      }\n    }\n    ... postFrag\n  }\n}"
{ 
  user(id: "1") {
    picture {
      url
    }
}

我通过appsync调用graphql后端,在我的graphql日志中,我看到以下响应记录:

{
  "data: {
    "user": {
      "picture": {
        "url": "example.com/link/to/a/picture"
      }
    }
  }
}

但是appsync会返回给定的响应:

{
  "data: {
    "user": {
      "picture": null
    }
  }
}

我已经明白,appsync希望我为用户图片查询定义解析器。Appsync想先调用用户,然后调用图片查询,但我想做的只是通过Appsync代理响应,而不调用除用户之外的任何其他查询。所有内容都在我的graphql后端进行评估,应该放在响应主体中,但appsync希望再次评估所有内容。

1号有什么解决办法吗。和2。?

共有1个答案

汪阳辉
2023-03-14

在编写本文时,您可以使用$ctx。infoobject从解析器中获取查询选择集,并通过HTTP解析器将相关数据发送到下游服务。转到此处,查找$ctx对象上的信息字段。要实现这一点,您需要在AppSync API中镜像下游API的模式。

谢谢你提起这件事。团队知道这些用例,这有助于确定优先级。

 类似资料:
  • 我在Java客户端有以下代码,它调用基于Spring的REST服务,我得到一个HTTP 400错误。但它与POST man Client完美配合 Java客户端: 服务器端REST服务代码为 现在,当客户端发送请求时,它会给我http 400错误,这可能是因为在客户端,即时消息发送JSON字符串,而在服务器端,它是一个主体,但这在POST MAN上有效 谁能建议我如何通过Java向基于spring

  • XMLHttpRequest 对象用于和服务器交换数据。 向服务器发送请求 如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:xmlhttp.open("GET","ajax_info.txt",true); xmlhttp.send(); 方法 描述 open(method,url,async) 规定请求的类型、URL 以及是否异步处理

  • 我希望使用Apache HTTP服务器作为OpenShift或Kubernetes中托管的一组微服务的反向代理。我想在Kubernetes路线上使用TLS passthrough。也就是说,需要在Apache(出站)创建TLS连接,并在POD终止。为了实现这一点,OpenShift需要在不解密有效负载的情况下识别目标主机,以便将每个请求转发给正确的微服务。TLS中的服务器名称指示(SNI)将具有主

  • 问题内容: 我正在尝试通过一个请求将数据从一个node.js服务器发送到另一个node.js服务器。我在“客户端” node.js中执行的操作如下: 该块或多或少是从node.js网站获取的,因此应该正确。我唯一看不到的是如何在变量中包括用户名和密码以进行实际登录。这是我处理服务器node.js中的数据的方式(我使用express): 如何将这些和字段添加到变量中以使其登录? 谢谢 问题答案: 发

  • 我们当前的项目需求是将一些请求路由到第三方外部api服务器。为此,我们使用的是基于spring祖尔的路由器服务。 现在的要求是,对于某些endpoint,到外部api服务器的请求已经通过不属于我们的外部代理服务器路由, 如何通过卷曲完成此操作: 通过给定的代理重定向请求。如何通过spring-祖尔服务器做到这一点? 我有一条线索?https://github.com/spring-cloud/sp