write ahead log

ロールフォワード用

雑に使えるHTTPサーバー作った

なんか最近色々面倒だし、作った。

こんなの使わなくても、もっといいのがある気もする。

httpbinとかいいかなと思ったけど、微妙に欲しいのと違った。

github.com

なんで作ろうと思ったんだっけ?となったので、なんか色々面倒だった事を書いておく。

(その前に)面倒な状況0

そもそもこういうのは入れるのが面倒なのでcurlでダウンロード&解凍で使えるようにした。

# windows(CMD。Powershellわからない)
curl -OL https://github.com/twinbird/hits/releases/download/v0.0.1/hits_windows_x86_64.zip
# 右クリックからzipを解凍
./hits

# linux
curl -OL https://github.com/twinbird/hits/releases/download/v0.0.1/hits_linux_x86_64.tar.gz
tar xfvz hits_linux_x86_64.tar.gz
./hits

# macはしらんけどたぶんlinuxと同じじゃないですかね。。。

Goはバイナリ1つなんで、ダウンロードファイル消せば環境汚さなくていい。

面倒な状況1

「よそ様のREST API叩くコード書いたのになんか動かん」みたいなのがあって、私はプリントデバッグしかできない愚か者なのでとにかく中身を見たかった。

とりあえず叩く時にはcurlでこんなのしたり雑にできるのに、雑に受けるってのが意外となくて困った。

curl -X POST \
    -d "key=your key" \
    -d "secret=your secret" \
    -d "param="parameter" \
    http://nice-service/nice-api/v1/post

hitsを使うと

以下で起動したら標準出力にアクセスしてきた情報を表示するようにした。

./hits

Time:
        2021/11/16 23:59:02
URL:
        /nice-api/v1/post
Method:
        POST
Protocol:
        HTTP/1.1
Header:
        Content-Length:47
        Content-Type:application/x-www-form-urlencoded
        User-Agent:curl/7.68.0
        Accept:*/*
Body:
        key=your key&secret=your secret&param=parameter
Parameters:
        key:your key
        secret:your secret
        param:parameter

面倒な状況2

「別会社がシステム作ってくれるはずだけど、そこまだ出来てないからとりあえず適当にサーバー立てて、適当なスクリプトでログ取って」みたいなのがめんどい。

hitsを使うと

別に1と同じなんだけど、ログファイルを指定できるようにした。

レスポンス返せとか、500返せとかがありがちなんで一応つけた。

./hits -o log.txt -r "It Works!" -s 200

面倒な状況3

「お客さんにHTMLのデザインモックzipで送って見てもらいたいんだけど、サーバーないしどうしよう」みたいなのがめんどい。

hitsを使うと

ディレクトリ指定してサーブする機能を付けた。今度からbat書いて送りつけようかなと思う。

./hits -d doc_root

面倒な状況4

とりあえず適当なJSON返すサーバーがほしい。

hitsを使うと

レスポンスヘッダー指定するオプションも加えたけど、JSON返すこと多すぎなのでオプションにした。

返す内容も変えたいので、標準入力とかファイル指定もできるようにもした。

cat response.json | ./hits -j

その他

どうせいつか使うだろうとベーシック認証とかルーティング定義みたいなのも入れた。

使うのか?

雑感

Goで書くとどこでも実行ファイル1つをコピーしたり削除したりでいいので使い勝手がいいなと思った。

「開発環境のサーバー使え」って思ったけど、「それが出来たら苦労しねー」と思った。

メンテめんどいから標準ライブラリだけで作るつもりだったのに、id:mattn氏のライブラリからだけは逃れられなかった。怖い。

書いてて気づいたけど、git bash上での標準入力周りの挙動修正と、TLS対応が欲しいと思って入れてなかった。めんどい。必要になったらやろう。だれかやってくれ。

最近めんどうばっか言ってるな俺。