血と汗となみだを流す

クラウドエンジニアになるための修業の場

API Gatewayをはじめよう③(リソースで設定する項目)

前回

この記事は何?

  • リソース(resource)を作成する時に指定する項目やパラメータなどについて調べました

「リソース」の設定項目ざっくりまとめ

  • リソースで定義したリソースPATHは、API Gatewayを呼ぶ時のendpointのPATHの一部として使われる
    • /searchとか
    • /detailとか
  • プロキシリソースとして設定すると、全ての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へアクセスしてみる f:id:Anorlondo448:20181013190825p:plain
  • 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にアクセスしてみる f:id:Anorlondo448:20181013194044p:plain
"pathParameters": {
    "proxytest": "testPath/param1"
  },
  • 取れてた!PATHごとに個別に設定したくないときはまとめられて便利!

CORSを有効

API Gatewayはプリフライトリクエストに応答し、小規模なパフォーマンスの向上が得られます。
この選択では基本的なCORS設定でOPTIONSメソッドを設定し、全てのオリジン、全てのメソッド、および複数の共通ヘッダーを許可します。
この設定を更に制御する場合は、リソースの作成後に[アクション]ボタンの[CORSの有効化]を選択できます

プリフライトリクエス

  • サーバから応答するメソッド一覧を収集する
  • リクエストを投げる前に、そのリクエストが受け入れられるか事前にチェックする

次回

  • メソッド(Method)について