curl
api

curlコマンドを使ってHTTPSのAPIを叩く

直にAPIを叩いて挙動を確かめたいときって往々にしてあると思います。
恥ずかしい話、私今まで RestletPostman などを用いて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コマンドに慣れたいものです。