LoginSignup
2
0

More than 1 year has passed since last update.

API GatewayのマッピングテンプレートをSwaggerで設定したい!

Posted at

タイトルの通りです。

AWSコンソールでは画面操作で簡単にマッピングテンプレートを設定することができます。
しかし、Swaggerで設定する方法については、まとまった情報があまり無かったため簡単に書いておきます。

設定例

設定対象のoptionsメソッドの部分を抜粋しています。

swagger.yaml
options:
  consumes:
    - "application/json"
  produces:
    - "application/json"
  responses:
    200:
      description: "200 response"
      schema:
        $ref: "#/definitions/Empty"
      headers:
        Access-Control-Allow-Origin:
          type: "string"
        Access-Control-Allow-Methods:
          type: "string"
        Access-Control-Allow-Headers:
          type: "string"
  x-amazon-apigateway-integration:
    responses:
      default:
        statusCode: "200"
        responseParameters:
          method.response.header.Access-Control-Allow-Methods: "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'"
          method.response.header.Access-Control-Allow-Headers: "'Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token'"
        responseTemplates:
          application/json: |
            #set($origin = $input.params().header.get('origin'))
            #if ($origin.matches("^http(s?)://.*\.example\.com"))
                #set($context.responseOverride.header.Access-Control-Allow-Origin = $origin)
            #end
    requestTemplates:
      application/json: '{"statusCode": 200}'
    passthroughBehavior: "when_no_match"
    type: "mock"

解説

マッピングテンプレートの設定は、リクエストとレスポンスそれぞれ、Swaggerの requestTemplatesresponseTemplates の項目に対応しています。
AWSコンソールと名称が違うのが分かりにくいですね。

今回はレスポンスについて設定したかったため、上の例では requestTemplates の設定をしています。

AWSのドキュメントにも情報があります。
x-amazon-apigateway-integration.response

設定例の内容

上の設定例の処理は、example.comのサブドメインからリクエストされた場合は、Access-Control-Allow-Originにリクエスト元のoriginを設定して返却し、それ以外の場合はAccess-Control-Allow-Originヘッダーを返却しないようにしています。CORS対策の設定ですね。

Lambda無しでのAccess-Control-Allow-Originの動的な設定は以下の記事が参考になりました。

Lambda無しでもいけます!!許可されたサイトにだけCORSを許可するためにAPI Gatewayのモックレスポンスを動的に設定してみた

Yamlの | が便利

Yamlの仕様の話なので蛇足ですが、| を使用することで複数行に渡る文字列を改行を使用して記述できるので認識の負荷が減りうれしいです。

調べ方

はじめは「swagger mapping templates」とかで検索してみたんですが、ぱっと出てきませんでした。なのでAWSコンソールでマッピングテンプレートを設定してAPIをデプロイした後、Swaggerファイルをエクスポートして内容を確認する、ということをしました。
CloudFormationのテンプレートを作るときもこの方法が楽なときがありますね。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0