ナンモワカランアザラシ

Ringed seal, clueless still

JSON-RPC 2.0をしゃべるBunのHTTPサーバーを作った

https://github.com/kesompochy/bunson

せっかくなのでnpmにもpublishした

JSON-RPC 2.0の規格に沿うようなHTTPサーバーをBunで動かせるようにした。
もともとはtedeh/jsonを使わせてもらおうと思ったのだけど、Bunで走らせたら上手く動かなかったので、せっかくだから作った。

Bunの組み込みHTTPサーバーで動く。

JSON-RPC自体の規格は特定のトランスポート層に依存しない。つまりHTTPでなくともよい。
jsonをリクエストとして受けたら、特定のスキームのjsonをレスポンスとして返したり何も返さなかったりする、ということだけが決まっている。
RPC(Remote Procedure Call)なので、サーバーではリクエストの内容に応じてなんらかの関数を実行することが期待されている。
ちなみにリクエストされたjsonが破綻している場合のレスポンスも決まっている。その場合はエラーの旨をjsonで返す。

notificationという仕組みが定められており、クライアントが返答を必要としない場合はnotificationの構造でリクエストを投げる。その場合はサーバーは返答をしてはいけないと決まっている。
しかしHTTPの場合はHTTPレスポンスをしないわけにもいかない(無理やり接続を切ることになってしまう?)ので、204(No content)を返すようにした。

EthereumはJSON RPCでやりとりしているらしい。へえ。ノード同士のやりとりもあるしブラウザからも投げられるだろうし、シンプルな規格がよかったのかな。

HTTPにこだわる必要はないので、そのうちにWebSocketでやりとりできるようにもしたい。Bunは簡単にWebSocket接続にアップグレードできるのだ。