いろんな方法でAPI Gatewayから返ってくるレスポンスを確認してみる

# はじめに
本記事ではAPI Gatewayに対してPOSTリクエストを送った際に、返ってくるレスポンス内容を6つの方法で確認していきます。


# 前提
- POSTメソッドを持つAPI Gatewayが作成されている事
- Lambdaが作成されており、API Gatewayと連携されている事

本記事ではLambdaのソースとしては下記のように簡単なレスポンスを返すだけのものを使用します。

<details><summary>Lambdaのソース</summary>

```python:lambda_function.py
import json

def lambda_handler(event, context):
    # リクエストボディを取得
    body = event.get('body', {})
    
    # レスポンスボディを作成
    response_body = {
        "message": "Hello from Lambda!",
        "input": body
    }
    
    # レスポンスを返す
    return {
        'statusCode': 200,
        'headers': {
            'Content-Type': 'application/json'
        },
        'body': json.dumps(response_body)
    }
```

</details>



# 環境
python：3.12
postman:11.4.0


# 1.マネジメントコンソールから確認する
API Gateway > API > リソース > 対象のAPIを選択し、テストタブからリクエストを送ってみます。

```json:リクエスト本文
{
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
}
```

レスポンス本文の項目でlambdaからのレスポンスを確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/992fcb6b-424b-d02b-0894-00f67646fcf5.png)


# 2.Postmanで確認する
POSTメソッド選択しAPIのリンクを入力します。
リクエストbody入力後、`Send`ボタンを押下しAPIのエンドポイントにリクエストを送ってみます。
画像下の赤枠部分のように、返ってきたレスポンスの内容を確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/491649ac-341d-210d-a6ce-d767a7d3e844.png)

# 3.cmd：curlでAPIのエンドポイントを叩いてみる
コマンドプロンプトを使用しAPIのエンドポイントに対して、headerとbody情報を追加したPOSTリクエストを送ってみます。

```bash
curl -X POST APIのエンドポイントのリンク -H "Content-Type: application/json" -d "{\"key1\": \"value1\", \"key2\": \"value2\", \"key3\": \"value3\"}"
```

実行すると下記のようにAPIからのレスポンスを確認できました。

```json
{"statusCode": 200, "headers": {"Content-Type": "application/json"}, "body": "{\"message\": \"Hello from Lambda!\", \"input\": {\"key1\": \"value1\", \"key2\": \"value2\", \"key3\": \"value3\"}}"}
```


# 4.PowerShell：Invoke-RestMethod でAPIのエンドポイントを叩いてみる
PowerShellを使用し、APIのエンドポイントに対してヘッダーとbody情報を追加したPOSTリクエストを送ってみます。


```powershell
Invoke-RestMethod -Uri "APIのエンドポイントのリンク" -Method Post -Headers @{ "Content-Type" = "application/json" } -Body (@{ "key1" = "value1"; "key2" = "value2"; "key3" = "value3" })
```

実行すると下記のようにAPIからのレスポンスを確認できました。


```powershell
statusCode headers                          body
---------- -------                          ----
       200 @{Content-Type=application/json} {"message": "Hello from Lambda!", "input": "key3=value3&key1=value1&key2=value2"}   
```

# 5. スクリプトを作成し確認する
Pythonの`requests`モジュールを使用して、APIにPOSTリクエストを送るだけの簡単なスクリプトを作成します。
スクリプトを実行する事でレスポンスを確認します。

```python:main.py
import requests
import json

# API エンドポイントの URL
url = "API エンドポイントの URL"

# リクエストボディのデータ
data = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
}

# ヘッダー情報
headers = {
    "Content-Type": "application/json"
}

# POST リクエストの送信
response = requests.post(url, headers=headers, data=json.dumps(data))

# レスポンスの内容を表示
print("Status Code:", response.status_code)
print("Response Body:", response.text)
```

スクリプトを実行すると、ステータスコードとレスポンス内容を確認できました。

```powershell
Status Code: 200
Response Body: {"statusCode": 200, "headers": {"Content-Type": "application/json"}, "body": "{\"message\": \"Hello from Lambda!\", \"input\": {\"key1\": \"value1\", \"key2\": \"value2\", \"key3\": \"value3\"}}"}
```


# 6.AWS CLIを使う
cmd上でAWS CLIを使用し、API Gatewayのエンドポイントを叩いてみます。

```bash
aws apigateway test-invoke-method --rest-api-id 対象のAPIのID --resource-id 対象のAPIのリソースID --http-method POST --path-with-query-string "/ステージ名" --body "{\"key1\": \"value1\", \"key2\": \"value2\", \"key3\": \"value3\"}"
```

スクリプトを実行するとステータスコードとレスポンス内容を確認できました。

```bash
{
    ～～～
    "status": 200,
    "body": "{\"statusCode\": 200, \"headers\": {\"Content-Type\": \"application/json\"}, \"body\": \"{\\\"message\\\": \\\"Hello from Lambda!\\\", \\\"input\\\": {\\\"key1\\\": \\\"value1\\\", \\\"key2\\\": \\\"value2\\\", \\\"key3\\\": \\\"value3\\\"}}\"}",
    ～～～
}
```

# 終わりに
本記事ではAPI GatewayにPOSTリクエストを送った際のレスポンスの確認方法をいくつか見ていきました。
目的や環境に応じて最適な方法を選んでいきたいです。


# 参考

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-request-validation-set-up.html

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/invoke-restmethod?view=powershell-7.4