リクエストの検証 - Amazon API Gateway

リクエストの検証

統合リクエストを進める前にルートリクエストの検証を実行するよう API Gateway を設定できます。検証に失敗すると、API ゲートウェイはバックエンドを呼び出さずにリクエストを失敗させ、「Bad request body」というゲートウェイレスポンスをクライアントに送信し、CloudWatch Logs に検証の失敗を発行します。このように検証を使用すると、APIバックエンドへの不要な呼び出しを減らすことができます。

モデル選択式

モデル選択式を使用して、同じルート内のリクエストを動的に検証できます。モデルの検証は、プロキシ統合または非プロキシ統合のモデル選択式を指定した場合に行われます。一致するモデルが見つからない場合は、$default モデルをフォールバックとして定義する必要があります。一致するモデルが存在せず、$default が定義されていない場合、検証は失敗します。選択式は Route.ModelSelectionExpression のような外観で 、Route.RequestModels のキーに評価されます。

WebSocket API のルートを定義する場合、オプションでモデル選択式を指定できます。この式は評価され、リクエストが受信されたときに本文の検証に使用されるモデルが選択されます。この式はルートの requestmodels のいずれかのエントリに評価されます。

モデルは JSON スキーマとしてで表され、リクエストボディのデータ構造を説明します。この選択式の特性により、特定のルートに対して実行時に検証するモデルを動的に選択できます。モデルを作成する方法については、「データモデルを理解する」を参照してください。

API Gateway コンソールを使用してリクエストの検証を設定する

次の例は、ルートにリクエストの検証を設定する方法を示しています。

最初にモデルを作成し、次にルートを作成します。次に、作成したルートにリクエストの検証を設定します。最後に、API をデプロイしてテストします。このチュートリアルを完了するには、$request.body.action をルート選択式とする WebSocket API と、新しいルートの統合エンドポイントが必要です。

また、API に接続するには wscat も必要です。詳細については、「wscat を使用した WebSocket API への接続とメッセージの送信」を参照してください。

モデルを作成するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. WebSocket API を選択します。

  3. ナビゲーションペインで、[モデル] を選択します。

  4. [モデルの作成] を選択します。

  5. [名前] にemailModelと入力します。

  6. [コンテンツタイプ] に、「application/json」と入力します。

  7. [モデルのスキーマ] に次のモデルを入力します。

    { "$schema": "http://json-schema.org/draft-04/schema#", "type" : "object", "required" : [ "address"], "properties" : { "address": { "type": "string" } } }

    このモデルでは、リクエストに E メールアドレスを含める必要があります。

  8. [Save] を選択します。

このステップでは、WebSocket API のルートを作成します。

ルートを作成するには
  1. メインナビゲーションペインで、[ルート] を選択します。

  2. [ルートの作成] を選択します。

  3. [Route key] (ルートキー) に「sendMessage」と入力します。

  4. 統合タイプを選択し、統合エンドポイントを指定します。詳細については、「WebSocket API 統合の設定」を参照してください。

  5. [ルートの作成] を選択します。

このステップでは、sendMessage ルートに対するリクエストの検証を設定します。

リクエストの検証を設定するには
  1. [ルートリクエスト] タブの [ルートリクエスト設定] で、[編集] を選択します。

  2. [モデル選択式] に、「${request.body.messageType}」と入力します。

    API Gateway は、messageType プロパティを使用して受信リクエストを検証します。

  3. [リクエストモデルを追加] を選択します。

  4. [モデルキー] に、「email」と入力します。

  5. [モデル]] で、[emailModel] を選択します。

    API Gateway は、messageType プロパティが email に設定されている受信メッセージを、このモデルと照合して検証します。

    注記

    API Gateway は、モデル選択式とモデルキーを一致させることができない場合、$default モデルを選択します。$default モデルが存在しない場合、検証は失敗します。本番稼働 API の場合は、$default モデルを作成することをお勧めします。

  6. [Save changes] (変更の保存) をクリックします。

このステップでは、API をデプロイしてテストします。

API をデプロイしてテストするには
  1. [API のデプロイ] を選択します。

  2. ドロップダウンリストから目的のステージを選択するか、新しいステージの名前を入力します。

  3. デプロイを選択します。

  4. メインナビゲーションペインで、[ステージ] を選択します。

  5. API の WebSocket URL をコピーします。URL は wss://abcdef123.execute-api.us-east-2.amazonaws.com/production のようになります。

  6. 新しいターミナルを開き、次のパラメータを指定して wscat コマンドを実行します。

    wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
    Connected (press CTRL+C to quit)
  7. 次のコマンドを使用して API をテストします。

    {"action": "sendMessage", "messageType": "email"}
    {"message": "Invalid request body", "connectionId":"ABCD1=234", "requestId":"EFGH="}

    API Gateway はリクエストを失敗させます。

    次のコマンドを使用して API に有効なリクエストを送信します。

    {"action": "sendMessage", "messageType": "email", "address": "mary_major@example.com"}