LoginSignup
39
30

More than 1 year has passed since last update.

AWS LambdaのqueryStringParametersとmultiValueQueryStringParametersの違いについて

Last updated at Posted at 2020-08-27

環境

Python3.7
プロキシ統合あり

queryStringParametersを使う

API GatewayからLambdaに渡されたペイロードからパラメータを取得できます。

リクエスト
https://XXXX/XXXX/XXXX?id=1&value=foo


response = event.get('queryStringParameters')

return {
    'statusCode': 200,
    'body': json.dumps(response)
}

結果

{
    "id": "1"
    "value": "foo"
}

パラメータ名で値を取得できます。

リクエスト
https://XXXX/XXXX/XXXX?id=1&value=foo


response = event.get('queryStringParameters').get('value')

return {
    'statusCode': 200,
    'body': json.dumps(response)
}

結果

"foo"

指定したパラメータ名が存在しなければNoneとなります。

multiValueQueryStringParametersを使う

こちらもパラメータを取得することができますが、
同じパラメータ名が複数(array)ある場合に使用します。

リクエスト
https://XXXX/XXXX/XXXX?id=1&value=foo&value=bar&value=baz


response = event["multiValueQueryStringParameters"].get("value")

return {
    'statusCode': 200,
    'body': json.dumps(response)
}

結果

{
    "id": [
        "1"
    ],
    "value": [
        "foo",
        "bar",
        "baz"
    ]
}

気をつけなければいけないのが、
存在しないパラメータ名を指定した時に、
そのまま配列の中身まで取得しようとするとエラーとなります。

リクエスト
https://XXXX/XXXX/XXXX?id=1

これは大丈夫(Noneになる)


response = event["multiValueQueryStringParameters"].get("value")

return {
    'statusCode': 200,
    'body': json.dumps(response)
}

下記はエラー
こういう取り方はやめましょう。

response = event["multiValueQueryStringParameters"].get("value")[0]

return {
    'statusCode': 200,
    'body': json.dumps(response)
}

同じパラメータ名が複数(array)のものをqueryStringParametersで取得する場合

リクエスト
https://XXXX/XXXX/XXXX?id=1&value=foo&value=bar&value=baz


response = event.get('queryStringParameters')

return {
    'statusCode': 200,
    'body': json.dumps(response)
}

結果

{
    "id": "1"
    "value": "baz"
}

最後の値で上書きされて、bazが取得されます。

まとめ

渡されるパラメータによって用途にあった取り方をしましょう。

39
30
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
39
30