将数据从aws api网关以x-www-form-urlencoded格式发送到http端点

时间:2017-07-14 14:10:07

标签: php amazon-web-services aws-api-gateway

我有一个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格式发送数据?

2 个答案:

答案 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键。

来源:http://docs.aws.amazon.com/apigateway/latest/developerguide/request-response-data-mappings.html#transforming-request-response-body