はじめに
HTTPie とは
HTTPie (pronounced aitch-tee-tee-pie) is a command-line HTTP client. Its goal is to make CLI interaction with web services as human-friendly as possible. HTTPie is designed for testing, debugging, and generally interacting with APIs & HTTP servers. The http & https commands allow for creating and sending arbitrary HTTP requests. They use simple and natural syntax and provide formatted and colorized output.
上記の通り説明がある。
簡単に言うと、HTTPie の特徴は以下となる。
- HTTP クライアントツール
- HTTP や API サーバーへのリクエストのレスポンスを、わかりやすく表示する
- 従来の同様のツールよりめっちゃみやすくしている
また一番最初に記載のあるように、このツールの読み方はエイチ/ティー/ティー/ピー/アイ/イーではなく、エイチ/ティー/ティー/パイらしい。
我々日本人としては http+ アイイーと呼んでしまいそうだが、間違えないように注意しよう。なおドキュメントを読んでみた感じでは、なぜパイなのかは見当たらなかった。知っている方がいれば、コメントください。
公式ドキュメントが英語しかないので、日本語で以下要点をまとめてみる。
実装
実装は以下の GitHub に公開されている。
特徴
ドキュメントには以下の項目が、主な特徴として記されている。
日本語も一緒に書いておく
- Expressive and intuitive syntax / わかりやすいシンタックス
- Formatted and colorized terminal output / 構造化され色付けされた出力
- Built-in JSON support / ビルトインJSON
- Forms and file uploads / フォームとファイルアップローデへの対応
- HTTPS, proxies, and authentication / HTTPS、プロキシ、認証への対応
- Arbitrary request data / 任意のリクエストデータ
- Custom headers / カスタムヘッダー
- Persistent sessions / 永続セッション
- Wget-like downloads / wget のようなダウンロード
- Linux, macOS, Windows, and FreeBSD support / 各種 OS への対応
- Plugins / プラグイン
- Documentations / ドキュメント
- Test coverage / テストカバレッジ
とにかくわかりやすく、かつ各種 OS でもサポートするようにつくわれていると言うことで理解は良さそう。
また、curl との差分としてはとにかく http/https に特化したクライアントツール、と言うことになると認識した。
インストール
以下では、macOS の場合のインストールを実際にやってみた。
macOS では、homebrew を用いることでワンラインインストールが可能。
$ brew update $ brew install httpie $ http --version 3.2.1
とても簡単であった。
なお公式ドキュメントを見ると他にも、以下のダウンロード方法が解説されているので、OS や環境に応じて選択できる。
macOS/Windows/Linux/Debian/Fedora/CentOS/ArchLinux/FreeBSD
また Linux では、バイナリ直インストールの方法も解説されていた。
使い方
基本的な使い方
$ https httpie.io/hello HTTP/1.1 200 OK Connection: keep-alive Content-Type: application/json; charset=utf-8 age: 0 cache-control: public, max-age=0, must-revalidate content-length: 264 date: Sun, 22 May 2022 05:33:02 GMT etag: "108-yw+Xn8xsGAsJIUMQvDLN7gAcQuc" server: Vercel strict-transport-security: max-age=63072000 x-matched-path: /api/hello x-vercel-cache: MISS x-vercel-id: hnd1::iad1::8pdzv-1653197581400-18a8165fe57b { "ahoy": [ "Hello, World! 👋 Thank you for trying out HTTPie 🥳", "We hope this will become a friendship." ], "links": { "discord": "https://httpie.io/discord", "github": "https://github.com/httpie", "homepage": "https://httpie.io", "twitter": "https://twitter.com/httpie" } }
こんな感じで出力が返ってくる。なお実行するとわかるが、出力は色付けされており、非常にみやすい。
また構造としては次のような形でリクエストを実行する。
$ http [flags] [METHOD] URL [ITEM [ITEM]]
https リクエストを送る場合は、http が https となる。
オプション指定の方法
上記で指定しているオプションの書き方を説明する。
METHOD: HTTP メソッド
第一引数に GET/POST/HEAD/PUT/PATCH/DELETE などメソッドを指定することで、各種機能を利用可能である。
以下では代表的な POST/GET を実際に実行してみた。
$ http POST pie.dev/post
$ http GET pie.dev/get hello=world
なお、メソッドは省略することも可能である。
省略した場合は、引数によって POST または GET がデフォルトで指定される。
* 何か送信するデータがある場合: POST
* 送信するデータがない場合: GET
URL: リクエスト URL
下記のように、何も指定しない場合はデフォルトで http://
が使われる。
$ http example.org
一方で、https
リクエストを使いたい場合は、コマンドを https にすることで実行可能である。
$ https example.org
URL のみを切り出すことが面倒な場合、httpie は以下のような記法でも実行可能である。
$ https ://example.org
つまり、リクエストを送りたいページの http/https の URL をそのままコピペし、プロトコルの後にスペースを一つ入れるだけで実行できる。これは地味に便利。
また便利ツールとしては、URL を省略した場合は localhost
が使われる、というものもある。以下は全て、localhost
に URL を解決する。
$ http :/foo $ http :3000/bar $ http :
ちなみに http
だけだとダメっぽいので、最小 URL は、:
となる。
ITEM: リクエストアイテム
httpie では、HTTP ヘッダ、JSON、フォーム、 URL パラメータなどさまざまなアイテムに対応している。
この点が既存の他の CLI ツールとの最も大きな差異であり、利点となりうる。
アイテムの種類 | 記法 | 説明 |
---|---|---|
HTTP ヘッダ | Name:Value |
任意の HTTP ヘッダ |
URL パラメータ | name==value |
指定された name/value のペアをクエリストリングパラメータとして、URL に追加する |
データ | field=value |
デフォルトでは JSONにシリアライズする。または-f を指定してエンコードも可能。 |
Raw JSON | field:=json |
そのまま JSON 送信可能! |
ファイルアップロード | field@/dir/file ,field@file:type=mime |
-f を指定した時のみ使える。指定したフォームに、画像やテキストファイルなどを送信可能になる |
送信例
$ http PUT pie.dev/put \ X-Date:today \ # HTTP ヘッダ token==secret \ # パラメータ name=John \ # データ age:=29 # Raw JSON
類似ツールとの差分
httpcat
生の http リクエストを生成し、通信するツールである。
これは httpie の下位互換ツールとしてドキュメント内で紹介されている。
curl
URL を指定してデータの通信をする優れたツールである。
さまざまなプロトコルに対応しているが、httpie は http/https に特化している点が異なる。
まとめ
さっと作ってさっと応答を確認できる httpie
は、昨今流行りのサーバーレス API などと非常に親和性が高い。
高速な開発につながるツールであると思われるので、一旦インストールして使ってみる価値はあり。
また公式ドキュメントにはさまざまなユースケースとともに紹介されているので、困ったらぜひ読んでみよう。