Edited at

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

More than 1 year has passed since last update.

直に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コマンドに慣れたいものです。