16
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

API Gateway→Lambdaをcurlでテストする

Last updated at Posted at 2019-05-31

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=USInumber=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だけ返ってきました。

参考文献

16
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?