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

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

Lambda 的 JavaScript 解析器函数参考

您可以使用 Amazon Lambda 的 Amazon AppSync 函数设置从 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 数据源允许您定义两个操作:InvokeBatchInvokeInvoke 操作让 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,请求应用于批次中的每个字段解析器。为了简洁起见,Amazon AppSync 将所有请求 payload 值合并到与请求对象匹配的单个对象下面的一个列表中。

以下示例请求处理程序显示了合并:

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