2015-11-09 12 views
20

私はthis postと同じことを達成しようとしていますが、私はそこでの返答を理解していないし、コメントの明確化を求める許可がありません。AWS APIゲートウェイからHTMLを返す

ようhere

に記載されているように、私は(空の応答モデルを介してGET要求を受け付けるAPIゲートウェイエンドポイントは、(Pythonで実装)ラムダ関数にいくつかのリクエスト変数を通過有し、戻るテキスト/ HTMLラムダ関数は、HTML文字列を返し、APIエンドポイントは、統合レスポンス@デフォルトの出力パススルー動作を使用し、HTML出力が引用されている場合は、以前のSOの質問で説明:

"\n<html>\n<body>\n ... \n</body>\n</html>\n" 

(@ARUNBALAN NVで)答えること「HTMLマークアップを変数に保存して返す」と言います。しかし、私はラムダ関数の意味でその意味を理解していません。 "variableHTML"という要素を持つ "application/json"レスポンスを返すことを意味しますか?このようなもの?

"{\"variableHTML\": \"\\n<html>\\n<body>\\n ... \\n</body>\\n</html>\\n\"}" 

私はAPIゲートウェイで&まで私の統合レスポンスが現在提案どおりに(200アプリケーション/ JSONレスポンスのための)要素を抽出するためのマッピングを使用していることを設定します。

#set($inputRoot = $input.path('$')) 
$inputRoot.variableHTML . 

結果が今であります単一のドットが返されます。

私は$ input.pathの代わりに$ input.json、異なる段階の異なるコンテンツタイプなどを試しましたが、上記の設定が他のスレッドからの受け入れられた回答と最もよく似ていると感じます。

私がこれに間違っているところの洞察は高く評価されます。読んでくれてありがとう!

答えて

38

あなたは非常に近いです。これを理解するための鍵は、返すPythonオブジェクトがJSONにシリアル化されることを認識していることです。したがって、文字列を返すと、引用符で囲まれ、有効なJSONオブジェクトにエスケープされます。あなたはこの文字列の値をしたい場合は、以下の統合レスポンスマッピングを使用します。

#set($inputRoot = $input.path('$')) 
$inputRoot 

#setラインは全体JSONの$inputRoot値は、あなたのPythonプログラムが返さ...あなただけのオリジナルの文字列であるオブジェクトを提供しますラムダフレームワークがJSONに変換する前に返されました。

プログラムではなく、マッピングで応答を作成するとします。次に、Pythonの文字列を返す代わりに、あなたはそうのような、Pythonオブジェクトを返すことができます:

return {"title": "Greeting", "message": "Hello"} 

そうのようなHTMLにそれを変換することができあなたのマッピング:

#set($inputRoot = $input.path('$')) 
<html><head><title>$inputRoot.title</title></head> 
<body>$inputRoot.message</body></html> 

をその方法がより多くあるマッピングを使用しますただし、単純なHTMLよりも構造化されたデータを返すのに便利です。あなたの問題に対して上記の最初のマッピングを使用したいと思います。

+0

ありがとう、チャールズ!完璧に動作します。 –

+1

これは私のために働いた。参考までに、マッピングテンプレートのコンテンツタイプとして 'text/html'を使用し、最後のhtmlコードブロックがうまく機能しました。 –

+1

青いボタンとDeploy APIをクリックすることを忘れないでください! – scottndecker

3

エクスプレス使用して、ちょうどのようなアプリケーションのヘッダを設定することができる:

res.set('Content-Type', 'text/html');

aws-serverless-expressまたは類似を使用して、これらのヘッダは、伝播されるべきです。

関連する問題