環境
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が取得されます。
まとめ
渡されるパラメータによって用途にあった取り方をしましょう。