如何从AWS AppSync请求中获取原始GraphQL查询
解决AWS AppSync传递客户端原始GraphQL查询至后端API的方案
核心可行方案:直接在请求映射模板中传递原始查询上下文变量
在AWS AppSync的HTTP数据源请求映射模板中,可直接通过内置上下文变量获取客户端发送的完整原始查询,无需手动重建。关键变量包括:
$context.request.query: 客户端发送的完整原始GraphQL查询字符串$context.variables: 客户端随查询一起发送的变量集合$context.request.operationName: 客户端指定的操作名称(如果有)
示例请求映射模板
将以下内容配置到HTTP数据源的请求映射模板中,即可把原始查询完整传递给后端GraphQL API:
{ "version": "2018-05-29", "method": "POST", "resourcePath": "/graphql", "params": { "headers": { "Content-Type": "application/json" }, "body": { "query": "$context.request.query", "variables": "$context.variables", "operationName": "$context.request.operationName" } } }
关于context.info.selectionSetGraphQL的说明
context.info.selectionSetGraphQL的设计用途并非返回完整原始查询,它仅会返回当前解析器对应的字段选择集合(即针对特定字段的片段),这属于文档描述的正常行为,并非不符。
替代方案:Lambda中间层(若映射模板无法满足需求)
如果需要对原始查询做额外处理(如修改、校验),可在AppSync和后端API之间加入Lambda中间层:
- 配置AppSync将请求发送至Lambda函数
- 在Lambda中通过
event.request.query获取原始查询 - 处理后再转发请求至后端GraphQL API
示例Lambda代码片段(Node.js):
exports.handler = async (event) => { // 获取原始查询和变量 const originalQuery = event.request.query; const variables = event.variables; // 可选:添加自定义处理逻辑 // ... // 转发至后端API const response = await fetch('https://your-backend-graphql-api.com/graphql', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query: originalQuery, variables: variables, operationName: event.request.operationName }) }); return await response.json(); };
内容的提问来源于stack exchange,提问作者Mpu-Mypl
相关产品推荐
相关产品推荐

