Amazon API GatewayとAWS Lambdaを利用してAPIを作成した際、簡単なテストにcurlを用いました。その時のコマンドをメモとして残しておきます。
Request/Response Bodyのデータ形式はJSONの場合です。
使用したcurlのバージョン
$curl --version
curl 7.63.0 (x86_64-apple-darwin13.4.0) libcurl/7.63.0 OpenSSL/1.1.1b zlib/1.2.11 libssh2/1.8.0
例1:Request BodyでデータをPOST
- 例えば下記のようなデータをRequest Bodyで投げたい時(例えばオブジェクト値 in 配列):
[
{
"ID": "USI",
"number": 55,
"validity": true
}
]
↓↓↓
$curl -X POST "https://{api-id}.execute-api.{region}.amazonaws.com/{stage}/{resource path}" -d "[{\"ID\":\"USI\", \"number\":55, \"validity\":true}]"
- データがオブジェクト値の場合
↓↓↓
$curl -X POST "https://{api-id}.execute-api.{region}.amazonaws.com/{stage}/{resource path}" -d "{\"ID\":\"USI\", \"number\":55, \"validity\":true}"
ポイント
- オプション
-X
でHTTPメソッドを記述する - オプション
-d
もしくは--data
でRequest Bodyの中身を記述する - データをダブルクォーテーション
""
で囲む - データの中で更にダブルクォーテーションを使う場合(例えば文字列に対して)、そのダブルクォーテーションの前にバックスラッシュ
\
を入れる
例2: URLにQuery String Parameterを入れてGET
例えばQuery String ParameterがID=USI
とnumber=55
だった場合、
curl "https://{api-id}.execute-api.{region}.amazonaws.com/{version}/{resource path}?ID=USI&number=55"
ポイント
- GETメソッドの場合は、オプション
-X
でHTTPメソッドを書く必要がない - Query String Parameterの書き方はそのまま
例3: APIキーを持たせてPUT
curl -X PUT "https://{api-id}.execute-api.{region}.amazonaws.com/{version}/{resource path}?ID=USI&number=55" -H "x-api-key: {api-key}" -d "[{\"ID\":\"USI\", \"number\":45}]"
ポイント
- APIキーの指定は
"x-api-key: xxxxxxxxxxx"
- オプション
-H
もしくは-(-)head
でRequest Headerの内容を記述する
ヘッダー情報(いらない?)
自分は下記の二つもとりあえず入れてたんですが、どうやらなくてもうまくいく気がします。
-H "accept: application/json"
-H "Content-Type: application/json"
- ちなみに、同一オプションで複数の項目を指定する場合、下記のように一つ一つ指定する必要があるようです(例は
-H
)
curl -X PUT "https://{api-id}.execute-api.{region}.amazonaws.com/{version}/{resource path}?ID=USI&number=55" -H "x-api-key: {api-key}" -H "accept: application/json -H "Content-Type: application/json" -d "[{\"ID\":\"USI\", \"number\":45}]"
やってみた(い)オプション
自分は使わなかったりちゃんと再確認できていないですが、こういうこともできました(or できそう)というレベルでご紹介します。
Cognito認証をしている場合
APIの認証に、AWS Cognitoで発行したAccess Tokenを利用している場合でも、Request HeaderにAPIキーを持たせるような形でアクセストークン(めっちゃ長い文字列)を入れてでうまくいった記憶があります
- 指定方法は
-H "Authorization: xxxxxxxxxxxxxxxxxxxxxxxx...."
curl -X PUT "https://{api-id}.execute-api.{region}.amazonaws.com/{version}/{resource path}?ID=USI&number=55" -H "
Authorization: {Token}" -d "[{\"ID\":\"USI\", \"number\":45}]"
オプション -v
もしくは -(-)verbose
で詳細をログ出力
$curl -v -X POST "https://{api-id}.execute-api.{region}.amazonaws.com/{stage}/{resource path}" -H "x-api-key: {api-key}" -d "[{\"ID\":\"USI\", \"number\":55, \"validity\":true}]"
通信の詳細がみられました。ログの最後に -v
なしの時と同じResponse内容が表示されました。
オプション -I
でResponse Headerの取得
curl -I "https://{api-id}.execute-api.{region}.amazonaws.com/{version}/{resource path}?ID=USI&number=55"
-I
なしの場合は[例1](## 例1:Request BodyでデータをPOST)のようにResponse Bodyが返ってくるところ、Response Headerだけ返ってきました。