JavaScript Lambda 的解析器函数参考 - Amazon AppSync
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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 数据源允许您定义两个操作:InvokeBatchInvoke。该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