血と汗となみだを流す

個人の思ったこと、やったことの吐き出し口です。

API Gatewayをはじめよう⑤(メソッドリクエスト(Method Request):リクエストの検証)

この記事は何?

  • API Gatewayのメソッド(Method)で、メソッドリクエスト(Method Request)で設定する項目について調べた結果のまとめです
  • メソッドリクエストだけでも内容がいっぱい詰まっているので、その中のリクエストの検証部分を書いています
  • リクエストの検証の設定で、GETパラメータやヘッダの必須チェック、POSTパラメータの属性(文字列や数字)チェックができる
  • POSTのチェックはモデルを予め作っておいて、それを紐付ける
  • 後続のlambdaを起動する前に、パラメータチェックできるのは良い

メソッド(method)には以下4つがある

  • メソッドリクエスト(Method Request) ←今回はこれ
  • 統合リクエスト(Integration Request)
  • 統合レスポンス(Integration Response)
  • メソッドレスポンス(Method Response)

メソッドリクエストで設定できる項目

  • 設定
    • 認証
    • リクエストの検証 ←今回はこれ
      • リクエストパス
      • URLクエリ文字列パラメータ
      • HTTPリクエストヘッダー
      • リクエスト本文
    • APIキーの必要性
  • SDK設定

リクエストの検証

  • API Gatewayの後ろ側にある処理やlambdaにパラメータを渡す前に検証ができる
    • パラメータエラーの時にlambdaを起動しないで済む
  • 検証の種類
    • クエリ文字列とヘッダ
    • クエリ文字列とヘッダと本文
    • 本文のみ
  • 各設定項目で詳細を設定するっぽい

URLクエリ文字列パラメータ

HTTP リクエストヘッダー

  • URLクエリ文字列パラメータと同様の定義をする

クエリ文字列パラメータとリクエストヘッダーをGETで検証

  • 以下の定義にしてみる f:id:Anorlondo448:20181021230656p:plain

  • テストで、何もパラメータ/ヘッダを付けずにリクエストを送ってみる f:id:Anorlondo448:20181021230924p:plain

  • ちゃんとエラーで返ってきた
{
  "message": "Missing required request parameters: [x-unko-header, param2]"
}
  • 必須パラメータ/ヘッダを付けてリクエストを送ってみる f:id:Anorlondo448:20181021231106p:plain

  • lambdaからのレスポンスが返ってきた

{
  "statusCode": 200,
  "body": "\"Hello Elastic!\""
}

リクエスト本文

参考ページと同じようにやってみる

  • モデルの作成 f:id:Anorlondo448:20181021231519p:plain
{
    "title": "testModel",
    "type": "object",
    "properties": {
        "param1": {
            "type": "string"
        },
        "param2": {
            "type": "number"
        }
    },
    "required": ["param1", "param2"]
}
  • postメソッドのリクエスト本文に作成したモデルを設定する f:id:Anorlondo448:20181021231615p:plain
  • param1もparam2も両方stringで送ってみる f:id:Anorlondo448:20181021231803p:plain
  • エラーで返ってきた
{
  "message": "Invalid request body"
}
  • 正しいリクエストを送ってみる f:id:Anorlondo448:20181021231858p:plain
  • lambdaからのレスポンスが返ってきた
{
  "statusCode": 200,
  "body": "\"Hello Elastic!\""
}

次回

  • APIキーの利用をやって、その次に認証を・・・

前回までの記事

プライバシーポリシー