我的一个 EC2 实例上运行着一台 graphql 服务器。我还运行了 AWS appsync,但目前它仅与几个 lambda 集成。
我想将我的 Appsync 与 graphql 服务器连接,因此 Appsync 将充当特定查询/突变的代理。
所以从客户端来看,它看起来像这样:
{
user {
id
}
}
Run Code Online (Sandbox Code Playgroud)
user查询,它被配置为代理graphql服务器的查询,无需任何更改{
user {
id
}
}
Run Code Online (Sandbox Code Playgroud)
并返回结果:
"data": {
"user": {
"id": "123456789"
}
}
Run Code Online (Sandbox Code Playgroud)
我是否能够以给定场景可能的方式配置 Appsync?这是使用 Appsync 的正确模式吗?
我能够通过 AppSync 代理我的请求,并使用以下解析器配置到达我的 graphql 服务器:
{
"version": "2018-05-29",
"method": "POST",
"resourcePath": "/graphql",
"params":{
"body": {
"query": "$util.escapeJavaScript($ctx.info.getSelectionSetGraphQL())"
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这仍然无法按预期工作 - 它与docs中的描述不同,我至少看到两个问题:
$ctx.info.getSelectionSetGraphQL()则删除查询名称和参数部分,并只给我嵌套的有效负载,所以这个查询:{
user(id: "1") {
picture {
url
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我打电话,就变成以下之一$ctx.info.getSelectionSetGraphQL():
{
picture {
url
}
}
Run Code Online (Sandbox Code Playgroud)
但我想使用整个查询,与文档中描述的相同:
"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}"
Run Code Online (Sandbox Code Playgroud)
user在 appsync 中定义了查询解析器,查询如下所示:{
user(id: "1") {
picture {
url
}
}
Run Code Online (Sandbox Code Playgroud)
我通过 appsync 调用我的 graphql 后端,在我的 graphql 日志中我看到记录了以下响应:
{
"data: {
"user": {
"picture": {
"url": "example.com/link/to/a/picture"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但 appsync 返回给我的给出的响应:
{
"data: {
"user": {
"picture": null
}
}
}
Run Code Online (Sandbox Code Playgroud)
我发现,appsync 期望我为两者user和picture查询定义解析器。Appsync 想要先调用user然后picture查询,但我想做的只是通过 appsync 代理响应,而不调用除 之外的任何其他查询user。所有内容都在我的 graphql 后端中进行评估,并且应该只放入响应正文中,但 appsync 想要再次评估所有内容。
对于1.2.有什么解决办法吗?
截至撰写本文时,您可以使用该$ctx.info对象从解析器中获取查询选择集,并通过 HTTP 解析器将相关数据发送到下游服务。转到此处并查找 $ctx 对象上的信息字段。要实现此目的,您需要在 AppSync API 中镜像下游 API 的架构。
感谢您提出这个问题。团队了解这些用例,这有助于确定优先级。
| 归档时间: |
|
| 查看次数: |
1276 次 |
| 最近记录: |