我最近开始创建一个用于学习的Slash斜线命令机器人。我从EC2服务器上的API网关和nodejs应用程序获取不同的请求主体格式。我只想从API网关获取请求主体的JSON格式。怎么能得到呢?
让我们看看主体格式和serverless.yml文件。
首先,我已经安装了无服务器框架并使用以下代码创建了serverless.yml文件
service: as-serverless-slack-bot
# NOTE: update this with your service name
# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"
provider:
name: aws
runtime: nodejs8.10
functions:
info:
handler: handler.info
events:
- http:
method: post
path: slack/info
cors: true
现在,我已经成功部署了它。但是,当我执行slack slash命令时,会从API网关接收字符串格式的请求正文,
body: 'token=XXXXXX&team_id=XXXXXXXX&team_domain=XXXXXXX&channel_id=XXXXXXX&channel_name=XXXXXX&user_id=XXXXXX&user_name=XXXXXXX&command=%2Finfo&text=about+users&response_url=https%3A%2F%2Fhooks.slack.com%2Fcommands%2XXXXXXX%2XXXXXXXXXXX&trigger_id=562173962614.55XXXXXXXXX.326e28e8599XXXcacf0XXXXXa'
对于同一操作,我在EC2 nodejs应用程序中得到了JSON格式的请求正文。
{
"body": {
"token": "xxxxxxxxx",
"team_id": "xxxxxx",
"team_domain": "xxxxxx",
"channel_id": "xxxx",
"channel_name": "xxxx",
"user_id": "xxx",
"user_name": "xx",
"command": "/info",
"text": "about users",
"response_url": "https://hooks.slack.com/commands/x/x/x",
"trigger_id": "560161450593.558xxxxxxxx3.3741c456xxxxx05cc6xxx62"
}
}
那么,如何从API网关获取JSON格式的请求正文?
答案 0 :(得分:0)
这是正确的。默认的lambda集成是通过“ lambda代理”进行的,该代理绕过API Gateway的请求/响应转换器。您基本上可以得到要处理的原始有效载荷。
如果您希望API Gateway完成某些工作,则需要将集成切换到lambda
并配置API Gateway以接受application/json
作为请求类型。
https://serverless.com/framework/docs/providers/aws/events/apigateway#lambda-integration