LoginSignup
29
14

More than 1 year has passed since last update.

curlコマンドでJSONデータをAPIにPOSTする

Posted at

APIの動作確認をしたいときに使えます。

今回はAPIのURIをlocalhost:5000/api/v1/とします。また、v1の後の文字列でリクエスト先を定義します。(例: ユーザ登録... localhost:5000/api/v1/users)

コマンドでリクエストを投げる

curl -X POST -H "Content-Type: application/json" -d "{"name" : "佐藤" , "mail" : "sato@example.com"}" localhost:5000/api/v1/users
  • -X POST : POSTでリクエストを投げるときに使います。

  • -H : リクエストヘッダを指定する時に使います。 今回はリクエストボディとしてjsonデータを送信したいので、Content-Type: application/json を指定しています。

  • -d : リクエストボディを指定します。

引数でリクエスト先のエンドポイントを指定することも忘れないように注意です。

シェルスクリプトで効率化

軽く動作確認するだけならコマンド入力で問題ありませんが、別のエンドポイントにアクセスする・正常系異常系のテストをするとなれば毎回同じコマンドを入力するのは面倒です。

シェルスクリプトでAPI実行を効率化してみましょう。
今回は
・ エンドポイント
・ リクエストで投げるJSON

を引数で受け取るようにしました。また、今回は/usr/local下にスクリプトを配置することにします。

postRequest.sh
#/bin/bash

# APIにPOSTリクエストする

### 引数一覧
# $1 : エンドポイント
# $2 : リクエストボディ(JSON)

### 変数定義

# エンドポイント
ENDPOINT="localhost:5000/api/v1/${1}"

# リクエストボディ(JSON形式で受け取る)
JSON="${2}"

# リクエストを出す
curl -X POST -H "Content-Type: application/json" -d "${JSON}" "${ENDPOINT}"

実行例

/bin/bash /usr/local/postRequest.sh users "{"name" : "佐藤" , "mail" : "sato@example.com"}"

コマンドを全て入力するよりも少ない手間でAPIを実行することができました。

余談

今回はスクリプトのパスを通していないのでフルパスで実行していますが、パスを通しておくと更に少ない手間でAPIにアクセスできるでしょう。

また、どのようなJSONデータを使うのか予め決まっている場合はデータをjsonファイルに定義しておき、引数でファイルパスを渡すという方法も良いかもしれません。

29
14
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
29
14