我有一个AWS API网关代理方法。如果我将数据发布到AWS API网关,那么AWS API网关也会将数据发布到我的PHP后端。我在API网关中有这个映射模板:
{
"body-json" : $input.json('$'),
"context" : {
"cognito-identity-id" : "$context.identity.cognitoIdentityId"
}
}问题是API网关发布的数据是JSON格式的。并且PHP不理解JSON (内容类型应用程序/json),$_POST数组为空。PHP理解application/x-www-form-urlencoded格式。如何让AWS API网关以x-www-form-urlencoded格式发送数据?
发布于 2017-07-14 22:18:47
这个问题很愚蠢,但是你有没有试过PHP's JSON Decode function呢?
$json = '{
"body-json" : $input.json(\'$\'),
"context" : {
"cognito-identity-id" : "$context.identity.cognitoIdentityId"
}
}';
$phpArray = json_decode($json, true);它将从该json生成一个关联PHP数组。
发布于 2017-07-14 22:32:23
Amazon API Gateway使用以下逻辑选择映射模板:
当请求中没有Content-Type头部时,API Gateway会假定其默认值为application/json。对于这样的请求,API Gateway使用application/json作为默认密钥来选择映射模板(如果已定义)。当没有与此键匹配的模板时,如果passthroughBehavior属性设置为WHEN_NO_MATCH或WHEN_NO_TEMPLATES,则API Gateway通过未映射的方式传递有效负载。
当请求中未指定Accept头部时,API Gateway假定其默认值为application/json。在这种情况下,API Gateway为application/json选择一个现有的映射模板来映射响应负载。如果没有为application/json定义模板,API Gateway会选择第一个现有的模板,并使用它作为默认模板来映射响应负载。同样,当指定的Accept标头值与任何现有模板键都不匹配时,API Gateway将使用第一个现有模板。如果没有定义模板,API Gateway只是通过unmapped传递响应负载。
例如,假设API具有为请求有效负载定义的application/json模板,并具有为响应有效负载定义的application/xml模板。如果客户端在请求中设置了"Content-Type : application/json“和"Accept : application/xml”头部,则请求和响应负载都将使用相应的映射模板进行处理。如果缺少Accept:application/xml头,则应用程序/xml映射模板将用于映射响应有效负载。要返回未映射的响应有效负载,您必须为application/json设置一个空模板。
选择映射模板时,仅使用Accept和Content-Type标头中的MIME类型。例如,"Content-Type: application/json;charset=UTF-8“的头部将有一个请求模板,其中选择了application/json键。
来源:http://docs.aws.amazon.com/apigateway/latest/developerguide/request-response-data-mappings.html#transforming-request-response-body
https://stackoverflow.com/questions/45105076
复制相似问题