本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
JavaScript Lambda 的解析器函数参考
您可以使用Amazon AppSync 函数Amazon Lambda来调整来自Amazon AppSync 您账户中的 Lambda 函数的请求,以及从 Lambda 函数返回的响应Amazon AppSync。您还可以在请求对象中指定要执行的操作类型。本节介绍对支持的 Lambda 操作的请求。
请求对象
Lambda 请求对象相当简单,允许将尽可能多的上下文信息传递给您的 Lambda 函数。
type LambdaRequest = { operation: 'Invoke' | 'BatchInvoke'; payload: any; };
以下是我们从上下文传递field
值和 GraphQL 字段参数的示例。
export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }
整个映射文档作为输入传递给您的 Lambda 函数,因此前面的示例现在如下所示:
{ "version": "2018-05-29", "operation": "Invoke", "payload": { "field": "getPost", "arguments": { "id": "postId1" } } }
运算
Lambda 数据源允许您定义两个操作:Invoke
和BatchInvoke
。该Invoke
操作让您Amazon AppSync 知道为每个 GraphQL 字段解析器调用您的 Lambda 函数。 BatchInvoke
指示批量Amazon AppSync 请求当前 GraphQL 字段。
operation
是必需的。
因为Invoke
,已解析的请求与 Lambda 函数的输入负载完全匹配。因此,以下示例请求处理程序:
export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }
经过解析并传递给 Lambda 函数,如下所示:
{ "version": "2018-05-29", "operation": "Invoke", "payload": { "arguments": { "id": "postId1" } } }
对于BatchInvoke
,请求适用于批处理中的每个字段解析器。为简洁起见,将所有请求payload
值Amazon AppSync 合并到与请求对象匹配的单个对象下的列表中。
以下示例请求处理程序显示了合并:
export function request(ctx) { return { operation: 'Invoke', payload: ctx, }; }
此请求经过评估并解析为以下映射文档:
{ "version": "2018-05-29", "operation": "BatchInvoke", "payload": [ {...}, // context for batch item 1 {...}, // context for batch item 2 {...} // context for batch item 3 ] }
其中,payload
列表的每个元素对应于一个批处理项目。Lambda 函数也预期返回列表形状的响应,并与请求中发送的项目顺序匹配,如下所示:
[ { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 1 { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 2 { "data": {...}, "errorMessage": null, "errorType": null } // result for batch item 3 ]
operation
是必需的。
有效负载
该payload
字段是一个容器,您可以使用它将任何数据传递给 Lambda 函数。
如果将该operation
字段设置为BatchInvoke
,Amazon AppSync 则将现有payload
值封装到列表中。
payload
为可选项。
响应对象
与其他数据源一样,您的 Lambda 函数向发送响应Amazon AppSync ,该响应必须转换为 GraphQL 类型。
Lambda 函数的结果是在context
结果属性 (context.result
) 上设置的。
如果您的 Lambda 函数响应的形状与 GraphQL 类型的形状完全匹配,则可以使用以下函数响应处理程序转发响应:
export function response(ctx) { return ctx.result }
没有适用于响应对象的必填字段或形状限制。但是,由于 GraphQL 是强类型的,因此解析后的响应必须与预期的 GraphQL 类型相匹配。
Lambda 函数批量响应
如果 operation
字段设置为 BatchInvoke
,Amazon AppSync 预计从 Lambda 函数返回项目列表。为了让 Amazon AppSync 将每个结果映射回原始请求项目,响应列表在大小和顺序方面必须匹配。在响应列表中加入null
项目是可以ctx.result
的;相应地设置为 null。