@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Hurl

hurl.dev

Hurl は一風変わった HTTP クライアントツール。同僚に教えてもらった。HTTP リクエストを宣言的に書いたテキストファイルを Hurl が解釈して実際の HTTP リクエストを発行する。レスポンスの検証やキャプチャなどの機能もあり、HTTP リクエストのテスト用途にも使える。

これも Rust で書かれており、シングルバイナリで動く。内部では HTTP エンジンに libcurl を使っていて、実質 curl のシンタックスシュガー。

例を見れば一発でどういうものかわかる。

# Get home:
GET https://example.net

HTTP/1.1 200
[Captures]
csrf_token: xpath "string(//meta[@name='_csrf_token']/@content)"

# Do login!
POST https://example.net/login?user=toto&password=1234
X-CSRF-TOKEN: {{csrf_token}}

HTTP/1.1 302

curl で一連の(前後で実行順序の依存関係がある)HTTP リクエストを発行するシェルスクリプトを書くようなシーンで良い代替になりそう。curl 自体はともかく、シェルスクリプトで色々頑張るのは割と苦労するので*1、悩むくらいなら他に依存なしで必要な機能が揃っている hurl だけで書くのも選択肢として悪くない、かもしれない。

既視感あるなと思って思い出したのが

www.jetbrains.com

で、リクエストの書き方はよく似てるのだけど*2、JetBrains の方には Hurl を内部で使っているとは書いてない。JetBrains 製品は Java で書かれてるから多分別物だろう。

*1:特に JSON の扱い。jq への依存を受け入れて jq を使うか Ruby や Python のワンライナーを混ぜるか、などいつも悩む

*2:HTTP リクエストをテキストで書いた風なのをそのまま実行する、というアイデアが同じなので、そっくりな見た目になるのは当然ではある