mruby-hibariで、ngx_mruby、mod_mruby、h2oで同じコードを使えるようになった
「Webサーバへの組み込みmrubyのRack-based APIまわり」の続き。
Rack-basedなAPIに対応したWebサーバ用のWebアプリケーションフレームワークのmruby-hibariですが、ngx_mruby、mod_mruby、h2oいずれのサーバ上でも同じコードで動く感じになりました。
mrubyでハンドラを書くわけですが、その際、書き方を好みに応じて使い分けられるよう、ふたつスタイルを用意しました。
DSLぽい感じ:
hibari do res.code = 200 res.headers["content-type"] = "text/html; charset=utf8" res.body.push("Hello, World!") req.params.each do |k,v| res.body.push("#{k}: #{v}") end end
OOPぽい感じ:
class MyApp < Hibari::App def build res.code = 200 res.headers["content-type"] = "text/html; charset=utf8" res.body.push("Hello, World!") req.params.each do |k,v| res.body.push("#{k}: #{v}") end end end MyApp.new.run
ハイパフォーマンスが要求されるWebサーバ組み込み言語上で、さらにレイヤを重ねるのはどうかという気もしますが、Rack-based APIで統一されると簡単にこういうこともできて面白いですね、という一例としてご笑覧ください。
あと、単純にWAFとして機能が足りなさ過ぎるのですが、その実装のためにはたくさんのmruby-*
を作らなければならなさそうで、尻込みしているところ……。