Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
50
Help us understand the problem. What is going on with this article?
@fuwamaki

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

More than 3 years have 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コマンドに慣れたいものです。

50
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
fuwamaki
小さいスタートアップ企業で、アプリ開発してます。
street-academy
教えたいと学びたいをつなぐまなびのマーケット「ストアカ 」を運営するスタートアップ

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
50
Help us understand the problem. What is going on with this article?