如何将Appsync请求标头传递给子解析程序



我有一个Appsync架构,它定义了一个用户类型,它本身包含一个Notes列表:

type User {
id: ID!
name: String!
notes: [Note]
}
type Note {
id: ID!
text: String!
}

User的请求映射中,我能够访问请求的头部,以访问承载令牌:

{
"version": "2018-05-29",
"method": "GET",
"resourcePath": $util.toJson("/prod/user/$ctx.args.userId"),
"params":{
"headers":{
"Content-Type": "application/json",
"Authorization": "Bearer $ctx.request.headers.Authorization",
}
}
}

这样做效果很好,并且头被传递到数据源。

User.notes字段的解析器是Lambda解析器,它本身迭代地调用类似的APIGET /prod/user/{userId}/notes/{noteId}。我可以使用$ctx.source...访问父解析程序响应数据。但是,我还需要能够通过Authorization标头(例如$ctx.request.headers.Authorization(。

我在User响应映射中尝试过,但不起作用:

#set($results = $ctx.result.body)
#set($headers = {
"Authorization": "Bearer $ctx.request.headers.Authorization"
})
#set($results.headers = $headers)
$results

我的问题是,如何将请求标头从父解析程序传递给子解析程序?也许问这个问题的另一种方式是,如果我在Graphql请求头上有一个Bearer令牌,我如何确保它总是被传递给任何被调用的解析器?

@Myz在评论中提到,解决方案是使用管道解析程序。

最后,我将头推送到$ctx.stash对象中(管道解析程序中的所有函数都可以使用该对象(——我使用:

$util.qr($ctx.stash.put("bearerToken", "Bearer $ctx.request.headers.Authorization"))

然后,我可以使用:"$ctx.stash.bearerToken"在每个函数(即子解析器(中访问该值

添加注释user_id

type Note {
id: ID!
user_id: ID!
text: String!
}

并解析为notes:[ctx.source.id的[Note]在这个应用程序之后

{
"version": "2018-05-29",
"statements": [
"select * from notes where user_id = '$ctx.source.id'"
]
}

其中$ctx.source.id链接到用户->id

相关内容

  • 没有找到相关文章

最新更新