直にAPIを叩いて挙動を確かめたいときって往々にしてあると思います。
恥ずかしい話、私今まで Restlet や Postman などを用いてAPIを叩いていて、curlなどのコマンドを用いてAPIを叩いたことがありませんでした。
コマンドでAPIの動作確認ができるように、まとめてみます。
また、今回はhttpsのAPIに焦点を当てて、GETとPOSTの場合を記載します。
環境
Mac OS High Sierra 10.13.3
iTerms2 Build 3.1.5
zsh 5.4.2
Homebrew 1.5.9
利用するコマンド
※ homebrew
のインストール方法は省略。
curl
URLを使用してデータ転送するためのコマンドラインツール。
https://curl.haxx.se/
macに最初から入っているはずだが、なければ下記コマンドでインストール。
$ brew install curl #curlインストール
$ curl --version #curlのバージョン確認
jq
コマンドラインJSONプロセッサ。
curlだけでもAPIは叩けるが、jqを使うとjsonを見やすい形で表示できる。
https://stedolan.github.io/jq/
homebrewでインストールする場合は下記コマンド。
$ brew install jq #jqインストール
$ jq --version #jqのバージョン確認
GET
curlのGETコマンド
$ curl https://xxx.xxx.com/api/ #GETのAPIリクエスト
$ curl -s https://xxx.xxx.com/api/ #`-s`で転送情報の表示を省略する
$ curl -Ss https://xxx.xxx.com/api/ #`-s`はerror情報も省略するが、`-Ss`はerror情報があれば表示
$ curl -v -s https://xxx.xxx.com/api/ #`-v`でheader情報も表示
curlとjqを用いたGETコマンド
※jqはGET以外でも同様に利用できる。
$ curl https://xxx.xxx.com/api/ | jq . #jqでjson表示を見やすく
$ curl https://xxx.xxx.com/api/ | jq '.[]' #配列の中を取り出し表示
$ curl https://xxx.xxx.com/api/ | jq '.[]._id' #`_id`の値の取り出し
GETコマンドで得られる表示情報例
GETコマンドで得られる表示情報を下記にまとめる。
転送情報
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 643 100 643 0 0 635 0 0:00:01 0:00:01 --:--:-- 636
header情報
> GET /api/ HTTP/1.1
> Host: my3-restapi.herokuapp.com
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: Cowboy
< Connection: keep-alive
< X-Powered-By: Express
< Content-Type: application/json; charset=utf-8
< Access-Control-Allow-Origin: *
< Content-Length: 591
< Etag: W/"24f-xscLdXNLiD+RodhDRaPEpFIeNxs"
< Date: Sun, 18 Mar 2018 14:52:14 GMT
< Via: 1.1 vegur
GETしたJSON情報
[{"_id":"5a65083f5f5569001498ad60","thing":"あいうえお"},{"_id":"5aae7d0562bd160014c2b28c","thing":"楽天"},{"_id":"5aae886b09adcb0014603652","thing":"かきくけこ"}]
GETしたJSON情報(jq利用)
[
{
"_id": "5a65083f5f5569001498ad60",
"thing": "あいうえお"
},
{
"_id": "5aae7d0562bd160014c2b28c",
"thing": "かきくけこ"
}
]
GETしたJSON情報 配列の中を取り出したもの
{
"_id": "5a65083f5f5569001498ad60",
"thing": "あいうえお"
},
{
"_id": "5aae7d0562bd160014c2b28c",
"thing": "かきくけこ"
}
GETしたJSON情報 _id
の値の取り出し
"5a65083f5f5569001498ad60"
"5aae7d0562bd160014c2b28c"
POST
curlのPOSTコマンド
POSTではcurlに下記を付与して利用する。
-X POST #POSTを叩くURLを指定
--data #queryを付与
-d #bodyを付与
-H #headerを付与
コマンドの例を下記に示す。
$ curl --data 'id=xxx&name=sample' -H "Content-Type: application/json" -X POST https://xxx.xxx.com/api
$ curl -d '{"result": {"parameters": {"thing": "あいうえお"}}}' -H "Content-Type: application/json" -X POST https://xxx.xxx.com/api
$ curl -d '{"result": {"parameters": {"thing": "かきくけこ"}}}' -H "Content-Type: application/json" -X POST https://xxx.xxx.com/api | jq .
※POSTのAPI実行時にレスポンスのheader情報やレスポンス情報が得られて取得、表示される。表示情報はGETと大きく相違ないため、省略する。
まとめ
よく利用するコマンドをまとめると上記のような感じです。
まだまだよく利用するコマンドが他にあると思いますので、あれば教えて欲しいです。
早くcurlコマンドに慣れたいものです。