亚马逊AWS官方博客
Amazon Cognito 集成微信登录部署系列(三)与 API Gateway 集成、处理输入参数、返回响应结果
上一篇中我们介绍了Eclipse配置Lambda开发环境,使用AWS Toolkit开始动手开发Java的Lambda函数。在这一篇中,我们将继续为大家以代码介绍Lambda函数如何处理来自API Gateway的输入参数、响应给API的返回结果。
处理输入和输出
我们使用API Gateway配合Lambda函数这套经典的无服务器架构来实现API接口。我们知道客户端请求服务端API时传递来的参数,API Gateway会以一个参数对象传递给Lambda函数。这个参数对象会传入我们的Lambda函数的 handleRequest方法,对于Java语言的函数来说,就是一个包含键值对的LinkedHashMap 对象。根据微信登录的流程,第一步需要传回后端API的参数只有 code一个。所以我们的Lambda函数接收到的参数对象形如下面这样:
为了满足Cognito认证的需要,这个API接口的返回结果需要是以下格式。
我们先来继续写Lambda的代码,后面再配置API Gateway。我们新建一个响应结果的类,CognitoWechatResponse.java。就是上述返回结果的一个对象。
下面我们来配置API Gateway的API,并集成前面已经创建的Lambda函数,再来处理一下输入参数和输出结果。
配置API Gateway的API
创建API
我们使用API Gateway配合Lambda函数这套经典的无服务器架构来实现API接口。这个演示例子中只需要一个后端API接口,我们在控制台如下配置:
https://console.amazonaws.cn/apigateway/home?region=cn-north-1
点击“创建API”按钮。
Choose the protocol,保持默认的“REST”。
新建 API,选择“新建 API”。在设置部分,API 名称输入“CognitoWechat”,描述输入“Cognito集成微信登录演示”。
点击“创建API”按钮。
然后来到API管理界面,创建一个资源,资源名输入“loginwechat”,再给该资源创建一个POST方法。在接下来的集成环境先选择“Lambda 函数”,前篇我们把Lambda上传创建在由光环新网运营的AWS中国(北京)区域,所以这里Lambda 区域选择“cn-north-1”。在Lambda 函数格中输入我们已经创建好的函数名“CognitoWechat”。点击右下角的保存按钮,弹出提示“您将为 API Gateway 授予调用您的 Lambda 函数的权限”,点击确定即可。
配置输入输出的数据模型
我们根据前述的输入参数和输出结果,在API的模型里创建相应的2个模型。参考《为请求和响应映射创建模型和映射模板》。内容类型都是“application/json”。输入参数的模型名称是 AuthenticationRequestModel,模型架构是
输出结果的模型名称是 AuthenticationResponseModel,模型架构是
把数据模型配置到API的请求和响应
在/loginwechat – POST – 方法执行中点击方法请求,展开方法请求,点击“添加模型”。内容类型输入“application/json”,在模型名称的下拉菜单选择我们前面创建的AuthenticationRequestModel,点击行尾的对勾图标保存。
在/ loginwechat – POST – 方法执行中点击方法响应,点击HTTP状态200前面的三角图标展开之,在“200 的响应正文”下的模型选择我们前面创建的AuthenticationResponseModel,点击行尾的对勾图标保存。
Lambda函数接收输入参数、返回模拟结果
我们知道客户端请求服务端API时传递来的参数,API Gateway会以一个参数对象传递给Lambda函数。这个参数对象会传入我们的Lambda函数的 handleRequest方法,对于Java语言的函数来说,就是一个包含键值对的LinkedHashMap 对象。因此,我们在Eclipse中打开CognitoWechat类,把函数创建初始的代码改成以下这样。
这时,我们再测试运行Lambda函数,在工程右键菜单找到 Amazon Web Services,再点选 Run Function to AWS Lambda…。在弹出的运行对话框中,JSON输入格现在可以填写模拟的输入参数了,比如
由于Lambda函数代码有更新,所以会重新上传,然后再执行,可以看到Java程序可以获取到输入参数,也成功输出和结果。
测试API Gateway中的API
我们打开API Gateway中的API控制台,在/loginwechat – POST – 方法执行下点击测试按钮。在方法测试界面,请求正文填写以下的模拟输入参数
到此,我们的Lambda函数和API集成也已顺利调通。
小结
这一篇中我们介绍了创建API Gateway中的API, Lambda函数如何处理来自API Gateway的输入参数、响应给API的返回结果,以及实现Lambda函数和API的集成。在下一篇中,我们将具体实现对接微信开放平台验证微信用户的业务逻辑。
索引
Amazon Cognito 集成微信登录部署系列(一)Cognito身份池、Dynamodb表和创建Lambda函数
Amazon Cognito 集成微信登录部署系列(二)用Lambda开发服务端API
Amazon Cognito 集成微信登录部署系列(三)与 API Gateway 集成、处理输入参数、返回响应结果
Amazon Cognito 集成微信登录部署系列(四)实现验证逻辑、发布 API
Amazon Cognito 集成微信登录部署系列(五)客户端集成 Cognito 验证