この記事は何?
- API Gatewayのメソッド(Method)で、メソッドリクエスト(Method Request)で設定する項目について調べた結果のまとめです
- メソッドリクエストだけでも内容がいっぱい詰まっているので、その中の
リクエストの検証
部分を書いています リクエストの検証
の設定で、GETパラメータやヘッダの必須チェック、POSTパラメータの属性(文字列や数字)チェックができる- POSTのチェックは
モデル
を予め作っておいて、それを紐付ける - 後続のlambdaを起動する前に、パラメータチェックできるのは良い
メソッド(method)には以下4つがある
- メソッドリクエスト(Method Request) ←今回はこれ
- 統合リクエスト(Integration Request)
- 統合レスポンス(Integration Response)
- メソッドレスポンス(Method Response)
メソッドリクエストで設定できる項目
リクエストの検証
- API Gatewayの後ろ側にある処理やlambdaにパラメータを渡す前に検証ができる
- パラメータエラーの時にlambdaを起動しないで済む
- 検証の種類
- クエリ文字列とヘッダ
- クエリ文字列とヘッダと本文
- 本文のみ
- 各設定項目で詳細を設定するっぽい
URLクエリ文字列パラメータ
名前
はパラメータの名前?param=1¶m=2
とかのクエリストリングのキー名
必須
チェックボックスはパラメータの必須チェックを指定できるキャッシュ
チェックボックスは、APIキャッシュのキャッシュキーにクエリ文字列パラメータを含めるかどうかを選択できる- API キャッシュを有効にして応答性を強化する
- クエリ文字列パラメータが複数ある場合に、一つだけキャッシュキーに含めたりもできる
HTTP リクエストヘッダー
- URLクエリ文字列パラメータと同様の定義をする
クエリ文字列パラメータとリクエストヘッダーをGETで検証
以下の定義にしてみる
テストで、何もパラメータ/ヘッダを付けずにリクエストを送ってみる
- ちゃんとエラーで返ってきた
{ "message": "Missing required request parameters: [x-unko-header, param2]" }
必須パラメータ/ヘッダを付けてリクエストを送ってみる
lambdaからのレスポンスが返ってきた
{ "statusCode": 200, "body": "\"Hello Elastic!\"" }
リクエスト本文
- GETメソッドではサポートされない(メソッドテスト内に記述があった)
- POSTメソッドでパラメータの検証を行う
- リクエスト本文の検証をするためのモデルを作成する
参考ページと同じようにやってみる
- モデルの作成
{ "title": "testModel", "type": "object", "properties": { "param1": { "type": "string" }, "param2": { "type": "number" } }, "required": ["param1", "param2"] }
- postメソッドのリクエスト本文に作成したモデルを設定する
- param1もparam2も両方stringで送ってみる
- エラーで返ってきた
{ "message": "Invalid request body" }
- 正しいリクエストを送ってみる
- lambdaからのレスポンスが返ってきた
{ "statusCode": 200, "body": "\"Hello Elastic!\"" }
次回
- APIキーの利用をやって、その次に認証を・・・