AWS API ゲートウェイを使用して作成され、Python Lambda 関数によってサポートされている API のクエリ文字列パラメーターを検証する方法を見つけようとしています。API Gateway は、必要なクエリ文字列パラメーターの存在を検証できます。ただし、特定のパラメーターの長さが制限内にあるかどうかを判断するなどの追加の検証の方法を見つけることができませんでした (たとえば、config_id は最小 7 文字の長さである必要があります)。このような検証は、API Gateway 要求検証を使用して要求本文に対して可能です。このリンクを参照してください。ただし、クエリ文字列パラメーターの場合、検証に json スキーマを使用しないため、必要な/不要な検証のみが可能です。
したがって、この問題を克服するために、クエリ文字列パラメーターを検証するために Python で webargs モジュールを試すことにしました。通常、flask や django などの Python フレームワークを使用して作成された API のリクエスト検証に使用されます。次のようにコアパーサーを使用しています(webargs docを参照):
from webargs import fields, validate, core, ValidationError
parser = core.Parser()
params = {"config_id": fields.Str(required=True, validate=lambda p: len(p) >= 7)}
def main(event, context: Dict):
try:
# print(event["queryStringParameters"])
input_params = event.get("queryStringParameters")
print("queryStringParameters: ", str(input_params))
if input_params is None:
input_params = {}
parsed_params = parser.parse(params, input_params)
print("parsedParams: ", str(parsed_params))
except ValidationError as e:
return {
"statusCode": 400,
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": True,
"x-amzn-ErrorType": "ValidationError",
},
"body": str(e),
}
これは、検証がラムダ関数で行われる方法です。ただし、必要な検証のみが正しく機能します。長さ 5 の config_id を渡すと、エラーは返されず、さらにラムダ関数に進みます。
これで何が問題になる可能性がありますか?パーサーは機能しているように見えますが、検証機能は機能していません。私はこれが初めてなので、助けていただければ幸いです。また、特にqueryStringParametersのラムダ関数で検証を行うより良い方法はありますか? コードで処理できますが、多くのパラメーターと多くの API を使用できるため、そのようなすべての検証のコードを書くのは面倒な作業になります。webargs モジュールが便利です。