2017-07-14 23 views
1

私はAWS APIゲートウェイプロキシメソッドを持っています。 AWS APIゲートウェイにデータを投稿すると、AWS APIゲートウェイはPHPバックエンドにデータを投稿します。 APIゲートウェイにこのマッピングテンプレートがあります。aws api gatewayからx-www-form-urlencoded形式のhttpエンドポイントにデータを送信

{ 
    "body-json" : $input.json('$'), 
    "context" : { 
     "cognito-identity-id" : "$context.identity.cognitoIdentityId" 
    } 
} 

APIゲートウェイがJSON形式でデータを投稿するという問題があります。 PHPはJSON(コンテンツタイプapplication/json)を理解できません。$ _POST配列は空です。 PHPは、application/x-www-form-urlencoded形式を理解しています。 x-www-form-urlencoded形式でデータを送信するAWS APIゲートウェイを作成するにはどうすればよいですか?

答えて

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配列を生成します。

Content-Typeヘッダが要求には存在しない、API Gatewayは、そのデフォルト値はアプリケーション/ JSONであることを前提としています

+0

私はPHPバックエンドにアクセスできません。私はAWS APIのゲートウェイ側でそれを修正したい – Ildar

+0

あなたの質問は、JSON(正確ではない)を解析できないPHPを指します。あなたの限界をより明確にするために、元の質問を編集します。 JavaScriptは、JSON.parse(yourJSON)などのJSONの解析にも使用できます。 – recurse

0

アマゾンAPIゲートウェイは、マッピングテンプレートを選択するには、次のロジックを使用しています。このような要求に対して、APIゲートウェイは、マッピング・テンプレートが定義されている場合は、デフォルトのキーとしてapplication/jsonを使用してマッピング・テンプレートを選択します。このキーに一致するテンプレートがない場合、passthroughBehaviorプロパティがWHEN_NO_MATCHまたはWHEN_NO_TEMPLATESに設定されている場合、API Gatewayはペイロードをunmappedに渡します。

要求でAcceptヘッダーが指定されていない場合、API Gatewayはその既定値がapplication/jsonであるとみなします。この場合、APIゲートウェイはapplication/jsonの既存のマッピングテンプレートを選択して応答ペイロードをマップします。 application/jsonに対してテンプレートが定義されていない場合、API Gatewayは最初の既存のテンプレートを選択し、それをデフォルトとして使用して応答ペイロードをマップします。同様に、指定されたAcceptヘッダー値が既存のテンプレートキーと一致しない場合、API Gatewayは最初の既存のテンプレートを使用します。テンプレートが定義されていない場合、API Gatewayはunmappedを通じて応答ペイロードを単に渡します。

たとえば、リクエストペイロード用に定義されたapplication/jsonテンプレートがAPIにあり、応答ペイロード用に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

関連する問題