api gateway + lambda(python) + laravel (1) post送信テスト編

まあなんかごちゃごちゃ書いたけど、こういう構成はそんなに少なくはないはずだ。

laravelに関して


今回laravelに関しては正直どういう風でもいい。/testにアクセスしたらapi gatewayのpostするようにしてみようか

Route::get('/test', function () {
    dd("test");
});

api gateway と lambda

これを見て、とりあえずhello world的なのを出せるようにしておく事。

% curl -X POST https://****.execute-api.ap-northeast-1.amazonaws.com/test

"Hello from Lambda!"

みたいに返るようにしている

laravel側で空ポスト

今、curlで空ポストを投入しているが、laravel側でこれを行ってみよう

use GuzzleHttp\Client;
Route::get('/test', function () {
    $client = new Client();
    $response = $client->post('https://5bxynejh3h.execute-api.ap-northeast-1.amazonaws.com/test');

    if ($response->getStatusCode() == 200) {
         $body = $response->getBody();
         $contents = $body->getContents();
         dd($contents);
    }
});

これがほぼ等価の内容となる。おそらく、ただしく値が帰ってると思う

ポストパラメーターを送信し、lambdaで受けとる

この種の通信は

  • application/x-www-form-urlencoded

  • application/json

の2つ方式があり、form-urlencodedの方はいわゆるhtmlのフォームで直で送りつけるいつものヤツみたいな感じであるがapplication/jsonの方がapiのやりとりでは楽だったりするのだった。

その場合以下のようなコードになる

use GuzzleHttp\Client;
Route::get('/test', function () {
    $client = new Client();

    $data = [
        'key1' => 'value1',
        'key2' => 'value2',
    ];

    try {
        $response = $client->post('https://***.execute-api.ap-northeast-1.amazonaws.com/test', [
            'json' => $data  // リクエストボディとしてJSONを送信
        ]);

        // $responseからデータを取得・処理するコード
        // 例: $content = $response->getBody()->getContents();

    } catch (GuzzleException $e) {
        // 例外処理
        // 例: echo $e->getMessage();
    }
});

url先はご自信のapi gatewayのurlに置換いただきたい。

laravel側

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;

Route::get('/test', function () {
    $client = new Client();

    $data = [
        'key1' => 'value1',
        'key2' => 'value2',
    ];

    try {
        $response = $client->post('https://5bxynejh3h.execute-api.ap-northeast-1.amazonaws.com/test', [
            'json' => $data  // リクエストボディとしてJSONを送信
        ]);

        $statusCode = $response->getStatusCode();  // HTTPステータスコード
        $headers = $response->getHeaders();  // レスポンスヘッダー
        $body = $response->getBody()->getContents();  // レスポンスボディ

        dd([
            'status_code' => $statusCode,
            'headers' => $headers,
            'body' => json_decode($body, true)  // JSONをPHPの配列に変換
        ]);

    } catch (GuzzleException $e) {
        // 例外処理
        dd([
            'error_message' => $e->getMessage()
        ]);
    }
});

とまあこんな感じになるわけだ。

次回はinertia + tailwind + reactみたいな構成でフォームを作成し、受信してみよう


この記事が気に入ったらサポートをしてみませんか?