komeの備忘録

東大院卒外資ITエンジニアの技術ブログ

httpieを触ってみた

はじめに

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.io

上記の通り説明がある。
簡単に言うと、HTTPie の特徴は以下となる。

  • HTTP クライアントツール
  • HTTP や API サーバーへのリクエストのレスポンスを、わかりやすく表示する
  • 従来の同様のツールよりめっちゃみやすくしている

また一番最初に記載のあるように、このツールの読み方はエイチ/ティー/ティー/ピー/アイ/イーではなく、エイチ/ティー/ティー/パイらしい。
我々日本人としては http+ アイイーと呼んでしまいそうだが、間違えないように注意しよう。なおドキュメントを読んでみた感じでは、なぜパイなのかは見当たらなかった。知っている方がいれば、コメントください。

公式ドキュメントが英語しかないので、日本語で以下要点をまとめてみる。

実装

実装は以下の GitHub に公開されている。

github.com

特徴

ドキュメントには以下の項目が、主な特徴として記されている。
日本語も一緒に書いておく

  • 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 では、バイナリ直インストールの方法も解説されていた。

httpie.io

使い方

基本的な使い方

$ 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 などと非常に親和性が高い。 高速な開発につながるツールであると思われるので、一旦インストールして使ってみる価値はあり。

また公式ドキュメントにはさまざまなユースケースとともに紹介されているので、困ったらぜひ読んでみよう。

(C) komee.org