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みたいな構成でフォームを作成し、受信してみよう