nomurabbitのブログ

nomurabbitのブログはITを中心にした技術ブログです。

nomurabbitのブログ

【AWS】サーバーレスAPIでURLパラメータ取得してみた【サーバーレス】

こんにちは!nomurabbitです。
この記事ではLambdaで作ったサーバーレスAPI
URLパラメータを取得する方法を紹介します。

例えば検索条件をAPIに渡すときに
使えそうですね!

テンプレートの準備

まず、Lambdaのテンプレートを準備します。

.NET Core3.1のテンプレートは、
この記事この記事を参考にしてください。

ソースコード

今回はパッケージの追加は不要です。

ソースコードのポイントは下記の通りです。

public ApiResponse FunctionHandler(object input, ILambdaContext context)
{
    try
    {
        ApiRequest apiRequest         = JsonSerializer.Deserialize<ApiRequest>(input.ToString(), ApiUtil.GetJsonSerializerOptionsDefault());
        ApiRequestBody apiRequestBody = (apiRequest.Body == null) ? new ApiRequestBody() : JsonSerializer.Deserialize<ApiRequestBody>(apiRequest.Body, ApiUtil.GetJsonSerializerOptionsDefault());

        ApiResponse apiResponse                   = new ApiResponse();
        ApiResponseBody apiResponseBody           = new ApiResponseBody();

        string targetParamKey = "user_id";

        Dictionary<string, string>.KeyCollection paramKeys = apiRequest.QueryStringParameters.Keys;
        foreach( string paramKey in paramKeys )
        {
            if(paramKey == targetParamKey)
            {
                apiResponseBody.Message = apiRequest.QueryStringParameters[targetParamKey] ;
            }
        }

        Dictionary<string, string> apiResonseHeaders             = new Dictionary<string, string>{{"Access-Control-Allow-Origin", "*"},{"Access-Control-Allow-Headers", "Content-Type"}, {"Access-Control-Allow-Methods", "POST"}, {"Lambda-Result-Code", ApiUtil.RESULT_CODE_SUCCESS}, {"Lambda-Result-Message", ApiUtil.GetResultCodeDictionary()[ApiUtil.RESULT_CODE_SUCCESS]}};
        Dictionary<string, string[]> apiResonseMultiValueHeaders = new Dictionary<string, string[]>{{"Set-Cookie", new string[] {"KEY1=VALUE1; SameSite=None", "KEY2=VALUE2; SameSite=None"}}};

        apiResponse.IsBase64Encoded     = false;
        apiResponse.StatusCode          = HttpStatusCode.OK;
        apiResponse.Headers             = apiResonseHeaders;
        apiResponse.MultiValueHeaders   = apiResonseMultiValueHeaders;
        apiResponse.Body                = JsonSerializer.Serialize(apiResponseBody);

        return apiResponse;
    }
    catch (System.Exception e)
    {
        ApiResponse apiResponse         = new ApiResponse();
        ApiResponseBody apiResponseBody = new ApiResponseBody();
        apiResponseBody.Message = "aaa";

        Dictionary<string, string> apiResonseHeaders             = new Dictionary<string, string>{{"Access-Control-Allow-Origin", "*"},{"Access-Control-Allow-Headers", "Content-Type"}, {"Access-Control-Allow-Methods", "POST"}, {"Lambda-Result-Code", ApiUtil.RESULT_CODE_ERROR}, {"Lambda-Result-Message", e.Message + "::" + e.StackTrace}};
        Dictionary<string, string[]> apiResonseMultiValueHeaders = new Dictionary<string, string[]>{{"Set-Cookie", new string[] {"KEY1=VALUE1; SameSite=None", "KEY2=VALUE2; SameSite=None"}}};
        
        apiResponse.IsBase64Encoded     = false;
        apiResponse.StatusCode          = HttpStatusCode.OK;
        apiResponse.Headers             = apiResonseHeaders;
        apiResponse.MultiValueHeaders   = apiResonseMultiValueHeaders;
        apiResponse.Body                = JsonSerializer.Serialize(apiResponseBody);

        return apiResponse;
    }
}

apiRequest.QueryStringParameters から
パラメータが取得できるんですね。

GitHubソースコードを載せていますので、
よければ参考にしてください。

github.com

以上でサーバーレスAPIでURLパラメータを
取得できると思います。

よかったら試してみてください。
では!