Amazon API Gateway
開発者ガイド

API Gateway で基本的なリクエストの検証を設定する

API の OpenAPI 定義ファイルでリクエストの検証を設定した後、OpenAPI 定義を API Gateway にインポートできます。また、API Gateway コンソールを使用するか、API Gateway REST API、AWS CLI、またはいずれかの AWS SDK を呼び出すことで設定することもできます。ここでは、OpenAPI ファイル、コンソール、API Gateway REST API を使用してこれを行う方法を示します。

OpenAPI 定義をインポートして基本的なリクエストの検証を設定する

以下のステップでは、OpenAPI ファイルをインポートすることにより基本的なリクエストの検証を有効にする方法について説明します。

OpenAPI ファイルを API Gateway にインポートしてリクエストの検証を有効にするには

  1. x-amazon-apigateway-request-validators オブジェクト マップの x-amazon-apigateway-request-validators.requestValidator オブジェクト オブジェクトのセットを API レベルで指定することにより、OpenAPI でリクエストの検証を宣言します。たとえば、サンプル API OpenAPI ファイルには x-amazon-apigateway-request-validators マップが含まれています。検証の名前はキーとして含まれています。

    OpenAPI 3.0OpenAPI 2.0
    OpenAPI 3.0
    { "openapi": "3.0.0", "info": { "title": "ReqValidation Sample", "version": "1.0.0" }, "servers": [ { "url": "/{basePath}", "variables": { "basePath": { "default": "/v1" } } } ], "x-amazon-apigateway-request-validators": { "all": { "validateRequestBody": true, "validateRequestParameters": true }, "params-only": { "validateRequestBody": false, "validateRequestParameters": true } } }
    OpenAPI 2.0
    { "swagger": "2.0", "info": { "title": "ReqValidation Sample", "version": "1.0.0" }, "schemes": [ "https" ], "basePath": "/v1", "produces": [ "application/json" ], "x-amazon-apigateway-request-validators" : { "all" : { "validateRequestBody" : true, "validateRequestParameters" : true }, "params-only" : { "validateRequestBody" : false, "validateRequestParameters" : true } }, ... }

    検証の名前は、次のステップで示すように、API またはメソッドで検証を有効にするときに選択します。

  2. API のすべてのメソッドでリクエストの検証を有効にするには、OpenAPI 定義ファイルの API レベルで x-amazon-apigateway-request-validator プロパティ プロパティを指定します。個々のメソッドでリクエストの検証を有効にするには、メソッドレベルで x-amazon-apigateway-request-validator プロパティを指定します。たとえば、以下の x-amazon-apigateway-request-validator プロパティは、オーバーライドされていない限りすべての API メソッドで params-only の検証を有効にします。

    OpenAPI 3.0OpenAPI 2.0
    OpenAPI 3.0
    { "openapi": "3.0.0", "info": { "title": "ReqValidation Sample", "version": "1.0.0" }, "servers": [ { "url": "/{basePath}", "variables": { "basePath": { "default": "/v1" } } } ], "x-amazon-apigateway-request-validator": "params-only", ... }
    OpenAPI 2.0
    { "swagger": "2.0", "info": { "title": "ReqValidation Sample", "version": "1.0.0" }, "schemes": [ "https" ], "basePath": "/v1", "produces": [ "application/json" ], ... "x-amazon-apigateway-request-validator" : "params-only", ... }

    個々のメソッドでリクエストの検証を有効にするには、メソッドレベルで x-amazon-apigateway-request-validator プロパティを指定します。たとえば、以下の x-amazon-apigateway-request-validator プロパティは all メソッドで POST /validation の検証を有効にします。これは、API から継承された params-only の検証をオーバーライドします。

    OpenAPI 3.0OpenAPI 2.0
    OpenAPI 3.0
    { "openapi": "3.0.0", "info": { "title": "ReqValidation Sample", "version": "1.0.0" }, "servers": [ { "url": "/{basePath}", "variables": { "basePath": { "default": "/v1" } } } ], "paths": { "/validation": { "post": { "x-amazon-apigateway-request-validator": "all", ... } } } ... }
    OpenAPI 2.0
    { "swagger": "2.0", "info": { "title": "ReqValidation Sample", "version": "1.0.0" }, "schemes": [ "https" ], "basePath": "/v1", "produces": [ "application/json" ], ... "paths": { "/validation": { "post": { "x-amazon-apigateway-request-validator" : "all", ... }, ... } } ... }
  3. API Gateway では、このサンプル OpenAPI 定義をインポートすることにより有効にされたリクエストの検証を使用して API を作成します。

    POST /restapis?mode=import&failonwarning=true HTTP/1.1 Content-Type: application/json Host: apigateway.us-east-1.amazonaws.com X-Amz-Date: 20170306T234936Z Authorization: AWS4-HMAC-SHA256 Credential={access_key_ID}/20170306/us-east-1/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature={sig4_hash} Copy the JSON object from this sample OpenAPI definition and paste it here.
  4. 新たに作成された API (fjd6crafxc) を指定されたステージ (testStage) にデプロイします。

    POST /restapis/fjd6crafxc/deployments HTTP/1.1 Content-Type: application/json Host: apigateway.us-east-1.amazonaws.com X-Amz-Date: 20170306T234936Z Authorization: AWS4-HMAC-SHA256 Credential={access_key_ID}/20170306/us-east-1/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature={sig4_hash} { "stageName" : "testStage", "stageDescription" : "Test stage", "description" : "First deployment", "cacheClusterEnabled" : "false" }

API Gateway REST API を使用してリクエストの検証をテストする方法については、「API Gateway REST API を使用して基本的なリクエストの検証をテストする」を参照してください。API Gateway コンソールを使用してテストする方法については、「API Gateway コンソールを使用して基本的なリクエストの検証をテストする」を参照してください。

API Gateway REST API を使用してリクエストの検証を設定する

API Gateway REST API では、リクエストの検証は RequestValidator リソースにより表されます。API がサンプル API と同じリクエストの検証をサポートするようにするには、RequestValidators コレクションに、キーとして params-only を含めてパラメータのみの検証を追加し、all を含めて完全な検証を追加します。

API Gateway REST API を使用して基本的なリクエストの検証を有効にするには

サンプル API と同様の API があるが、リクエストの検証は設定していないことを想定しています。API でリクエストの検証がすでに有効な場合、requestvalidator:update または method:put の代わりに適切な requestvalidator:create または method:put を呼び出します。

  1. params-only リクエストの検証を設定するには、以下のように requestvalidator:create アクションを呼び出します。

    POST /restapis/restapi-id/requestvalidators HTTP/1.1 Content-Type: application/json Host: apigateway.region.amazonaws.com X-Amz-Date: 20170223T172652Z Authorization: AWS4-HMAC-SHA256 Credential={access_key_ID}/20170223/region/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature={sig4_hash} { "name" : "params-only", "validateRequestBody" : "false", "validateRequestParameters" : "true" }
  2. all リクエストの検証を設定するには、以下のように requestvalidator:create アクションを呼び出します。

    POST /restapis/restapi-id/requestvalidators HTTP/1.1 Content-Type: application/json Host: apigateway.region.amazonaws.com X-Amz-Date: 20170223T172652Z Authorization: AWS4-HMAC-SHA256 Credential={access_key_ID}/20170223/region/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature={sig4_hash} { "name" : "all", "validateRequestBody" : "true", "validateRequestParameters" : "true" }

    前述の検証キーがすでに RequestValidators マップに存在する場合、検証ルールをリセットする代わりに requestvalidator:update アクションを呼び出します。

  3. all リクエストの検証を POST メソッドに適用するには、method:put を呼び出して指定された検証 (requestValidatorId プロパティにより指定) を有効にするか、method:update を呼び出して有効な検証を更新します。

    PUT /restapis/restapi-id/resources/resource-id/methods/POST HTTP/1.1 Content-Type: application/json Host: apigateway.region.amazonaws.com X-Amz-Date: 20170223T172652Z Authorization: AWS4-HMAC-SHA256 Credential={access_key_ID}/20170223/region/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature={sig4_hash} { "authorizationType" : "NONE", ..., "requestValidatorId" : "all" }

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

API Gateway コンソールでは、3 つの検証のうちいずれかを使用してメソッドで基本的なリクエストの検証を設定できます。

  • 本文の検証: これは、本文のみの検証です。

  • クエリ文字列パラメータとヘッダーの検証: これは、パラメータのみの検証です。

  • 本文、クエリ文字列パラメータ、ヘッダーの検証: この検証は、本文とパラメータ両方の検証に使用します。

上記のいずれかの検証を選択して API メソッドで有効にすると、検証がまだ API の検証マップに追加されていない場合、API Gateway コンソールは検証を API の RequestValidators マップに追加します。

メソッドでリクエストの検証を有効にするには

  1. まだログインしていない場合は API Gateway コンソールにサインインします。

  2. 新しい を作成するか、既存の API を選択します。

  3. API の新しいリソースを作成するか、既存のリソースを選択します。

  4. リソースで新しいメソッドを作成するか、既存のメソッドを選択します。

  5. [メソッドリクエスト] を選択します。

  6. [設定] で [リクエストの検証] の鉛筆アイコンを選択します。

  7. [リクエストの検証] ドロップダウンリストから Validate bodyValidate query string parameters and headers、または Validate body, query string parameters, and headers を選択した後、チェックマークアイコンを選択して選択内容を保存します。

コンソールでリクエストの検証をテストして使用するには、「API Gateway コンソールを使用して基本的なリクエストの検証をテストする」の手順に従います。