Serverless 触发器 POST 情况差异
阿里云 API 网关
阿里云 API 网关支持不同类型的的 POST 请求。
入参透传的 POST
网关配置如下。

网关透传的 event 特征为有 body
字段以及 isBase64Encoded
为 true,解码比较容易,直接解 base64 即可。
info
透传了之后,即为所有的结果交给函数处理。
示例一 (text/html)
下面的 event,是一个最简单的透传示例,因为其中的 content-type
为 text/html
,所以 body 传递过来 base64 解码的结果也同样是字符串。
{
"body": "eyJjIjoiYiJ9",
"headers": {
"x-ca-dashboard-action": "DEBUG",
"x-ca-dashboard-uid": "125087",
"x-ca-stage": "RELEASE",
"x-ca-dashboard-role": "USER",
"user-agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_172)",
"accept-encoding": "gzip,deflate",
"content-md5": "Kry+hjKjc2lvIrwoJqdY9Q==",
"content-type": "text/html; charset=utf-8"
},
"httpMethod": "POST",
"isBase64Encoded": true,
"path": "/api/321",
"pathParameters": {
"userId": "321"
},
"queryParameters": {}
}
函数结果。
ctx.request.body; // '{"c":"b"}' => string
示例二(application/json)
使用 content-type
为 application/json
,这样框架认为是一个 JSON,会自动被 JSON.parse。
{
"body": "eyJjIjoiYiJ9",
"headers": {
"X-Ca-Dashboard-Action": "DEBUG",
"X-Ca-Dashboard-Uid": "125087",
"X-Ca-Stage": "RELEASE",
"X-Ca-Dashboard-Role": "USER",
"User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_172)",
"Accept-Encoding": "gzip,deflate",
"Content-MD5": "Kry+hjKjc2lvIrwoJqdY9Q==",
"Content-Type": "application/json; charset=utf-8"
},
"httpMethod": "POST",
"isBase64Encoded": true,
"path": "/api/321",
"pathParameters": {
"userId": "321"
},
"queryParameters": {}
}
函数结果。
ctx.request.body; // {"c":"b"} => object