curl と jo で JSON を POST する
curl と jo を使って JSON を POST するサンプルです。
背景
JSON の HTTP API を作成した際に、軽い動作確認として curl を使って JSON を POST することがあります。 例えば以下のように。
$ curl -X POST -H "Content-Type: application/json" -d '{"message": "hello"}' https://example.com/api
上記のように簡単な構造の JSON の場合はいいですが、少し複雑な JSON の場合、コマンドラインで作成するのはエスケープの問題なので少し面倒になることがありました。 そんな時に jo をを使うと楽に書けるかも、と思い試してみました。
curl + jo
jpmens/jo: JSON output from a shell
jo はコマンドラインで簡単に JSON を作成するためのツールです。
$ jo -p name=taro age=17 { "name": "taro", "age": 17 }
これを curl と組み合わせる際には jo で JSON を生成して、それをパイプで渡してあげるとうまくいきました
$ jo -p message=hello | curl -X POST -H "Content-Type: application/json" -d @- https://example.com/api
curl の -d オプションで @- を指定すると標準入力を受け取ってくれるので、それで jo で生成した JSON を渡しています。
少し関係ないですが、毎回 curl -X POST -H "Content-Type: application/json" を入力するのは面倒なので、
cj` で alias を作成してあげるといいかも
# alias をしておくと $ alias cj='curl -X POST -H "Content-Type: application/json"' # 以下のようにかけて少しすっきり $ jo -p message=hello | cj -d @- https://example.com/api