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

まとめ