前回
この記事は何?
- リソース(resource)を作成する時に指定する項目やパラメータなどについて調べました
「リソース」の設定項目ざっくりまとめ
- リソースで定義したリソースPATHは、API Gatewayを呼ぶ時のendpointのPATHの一部として使われる
- プロキシリソースとして設定すると、全てのPATHのリクエストを処理してくれる
/search
とか /detail
個別に処理するのでなく/
配下をまとめて処理してくれる
- backend側で上記のPATH情報が取得できる
- CORS設定をしてクロスドメイン通信を可能にできる
リソース設定内の項目について
プロキシリソースとして設定
greedyパスパラメータegを使用して全てのサブリソースへのリクエストを処理します
{proxy+}. プロキシリソースを作成すると、ANYと呼ばれる特別なHTTPメソッドも作成されます。
ANYメソッドは全ての有効なHTTP動詞をサポートし、1つのHTTPエンドポイントまたはLambda統合にリクエストを転送します
greedyパス
- 一般的なPATHに分類されるrequestのグループのPATHと動作を個別に指定する代わりに、PATHへの全てのrequestを傍受してそれらを同じ機能にルーティングする
リソース名
- リソースの名称
- どこで使われてるかわからん
- 入力時にリソースパスと連動しているように見えるけど、別のものを入力できた
- 保存後、確認できる場所なし(リソースパスは見えるが・・・)
リソースパス
波括弧を使用してパスパラメータを追加できます。
たとえば、リソースパス {username} は、"username" という名前のパスパラメータを表します。
プロキシリソースとして /{proxy+} を設定すると、そのサブリソースへのすべてのリクエストがキャッチされます。
たとえば、/foo への GET リクエストがこの対象となります。
/ へのリクエストを処理するには、/ リソースで新しい ANY メソッドを追加します。
- endpontのPathとなる文字列
{}
で囲むとパスパラメータとなり、backend側(Lambda)で指定した文字列を取得できる
リソースパスをlambdaで取得してみる
- プロキシリソースでリソースパスを
{/proxytest+}
とし、 /testPath
へアクセスしてみる
- Lambda側は受け取ったeventを出力するようにしておく
console.log('Loading event')
exports.handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(event)
};
return response;
};
{
"resource": "/{proxytest+}",
"path": "/testPath",
"httpMethod": "GET",
"headers": null,
"multiValueHeaders": null,
"queryStringParameters": null,
"multiValueQueryStringParameters": null,
"pathParameters": {
"proxytest": "testPath"
},
- 任意のPATHでLambdaまで処理が渡ってた!
- 階層を深くして、
/testPath/param1
にアクセスしてみる
"pathParameters": {
"proxytest": "testPath/param1"
},
- 取れてた!PATHごとに個別に設定したくないときはまとめられて便利!
CORSを有効
API Gatewayはプリフライトリクエストに応答し、小規模なパフォーマンスの向上が得られます。
この選択では基本的なCORS設定でOPTIONSメソッドを設定し、全てのオリジン、全てのメソッド、および複数の共通ヘッダーを許可します。
この設定を更に制御する場合は、リソースの作成後に[アクション]ボタンの[CORSの有効化]を選択できます
プリフライトリクエスト
- サーバから応答するメソッド一覧を収集する
- リクエストを投げる前に、そのリクエストが受け入れられるか事前にチェックする
次回