我有一个AWS API网关代理方法。如果我将数据发布到AWS API网关,那么AWS API网关会将数据发布到我的PHP后端。我在API网关中有这个映射模板:
{
"body-json" : $input.json('$'),
"context" : {
"cognito-identity-id" : "$context.identity.cognitoIdentityId"
}
}
问题是API网关以JSON格式发布数据。并且PHP不了解JSON(内容类型application / json),$ _POST数组是空的。 PHP理解application / x-www-form-urlencoded格式。如何使AWS API网关以x-www-form-urlencoded格式发送数据?
答案 0 :(得分:0)
愚蠢的问题,但你试过PHP's JSON Decode function吗?
$json = '{
"body-json" : $input.json(\'$\'),
"context" : {
"cognito-identity-id" : "$context.identity.cognitoIdentityId"
}
}';
$phpArray = json_decode($json, true);
这将从json生成一个关联的PHP数组。
答案 1 :(得分:0)
Amazon API Gateway使用以下逻辑选择映射模板:
当请求中不存在Content-Type标头时,API Gateway会假定其默认值为application / json。对于此类请求,API Gateway使用application / json作为默认键来选择映射模板(如果已定义)。当没有模板匹配此密钥时,如果passthroughBehavior属性设置为WHEN_NO_MATCH或WHEN_NO_TEMPLATES,则API Gateway会通过unmapped传递有效内容。
如果请求中未指定Accept标头,API Gateway会假定其默认值为application / json。在这种情况下,API Gateway选择application / json的现有映射模板来映射响应有效负载。如果没有为application / json定义模板,API Gateway会选择第一个现有模板并将其用作默认映射响应有效内容。同样,当指定的Accept标头值与任何现有模板密钥不匹配时,API Gateway会使用第一个现有模板。如果未定义模板,则API Gateway仅通过未映射的方式传递响应有效内容。
例如,假设API具有为请求有效内容定义的应用程序/ json模板,并且具有为响应有效内容定义的application / xml模板。如果客户端在请求中设置“Content-Type:application / json”和“Accept:application / xml”标头,则将使用相应的映射模板处理请求和响应有效负载。如果不存在Accept:application / xml标头,则将使用application / xml映射模板映射响应有效负载。要返回未映射的响应有效负载,必须为application / json设置一个空模板。
在选择映射模板时,只使用Accept和Content-Type标头中的MIME类型。例如,标题为“Content-Type:application / json; charset = UTF-8”将包含一个请求模板,其中选择了application / json键。