<h2>问题</h2>
<p>一方面,我发现了一些例子,其中<code>__typename</code>(如您所述)可能需要包含在查询中。
另一方面,这也很有趣,因为AWS文档没有提到在查询中包含<code>__typename</code>,但是提到了接口的使用,所以我想知道这是否是让事情正常运行的关键,所有类型都扩展相同的接口</p>
<h2>解决方案</h2>
<h2>选择1</h2>
<p>尝试将<code>__typename</code>包含在<code>Meal</code>和<code>OtherMeal</code>片段中(您提到在查询中使用<code>__typename</code>,但不确定放在哪里)</p>
<h3>示例</h3>
<pre><code>query test_query {
GetMealMix(date: "2020-11-20") {
... on Meal {
__typename
name
}
... on OtherMeal {
__typename
name
}
}
}
</code></pre>
<h2>选择2</h2>
<p>union中包含的所有类型都使用相同的接口,如您共享的文档中标题为“类型解析示例”的部分所示</p>
<h3>示例</h3>
<pre><code>interface MealInterface { name: String }
type Meal implements MealInterface { name: String }
type OtherMeal implements MealInterface { name: String }
</code></pre>
<h2>注释</h2>
<h2>硬编码响应</h2>
<p>您返回一个硬编码的响应,但我不确定是否需要额外的元数据来处理AWS Lambda上的GQL响应。尝试记录响应以确定是否包含<code>__typename</code>。如果不包含^ {CD1>},请考虑在ID中添加Type名称,并使用您共享的AWS文档中推荐的转换:</P>
<pre><code>#foreach ($result in $context.result)
## Extract type name from the id field.
#set( $typeName = $result.id.split("-")[0] )
#set( $ignore = $result.put("__typename", $typeName))
#end
$util.toJson($context.result)
</code></pre>
<h2>身份识别码</h2>
<p>此外,“identity_id”参数中的“this”可能由于GraphQL处理id类型的方式而导致缓存问题(请参见:<a href="https://graphql.org/learn/schema/#scalar-types" rel="nofollow noreferrer">https://graphql.org/learn/schema/#scalar-types</a>)</p>
<h2>参考资料</h2>
<p>AWS上的GraphQL_u_类型名查询示例:<a href="https://github.com/LambdaSharp/AppSync-Challenge" rel="nofollow noreferrer">https://github.com/LambdaSharp/AppSync-Challenge</a>
GraphQL标量类型:<a href="https://graphql.org/learn/schema/#scalar-types" rel="nofollow noreferrer">https://graphql.org/learn/schema/#scalar-types</a></p>