先日、やっつけのWebサーバーを書く際にRubyのSinatraで書いてみたのですが、「簡単に書けて良いな〜」と思ったので、OCamlでもそれっぽいものを適当に作ってみました。
現状はこんな感じでかけます:
open Ocatra open HttpCommon open HttpRequest open HttpResponse let _ = get "/" (fun req -> create_response (Some (HttpContent.TextPlain "Hello, World (GET)")) () ); post "/" (fun req -> create_response (Some (HttpContent.TextPlain "Hello, World (POST)")) () ); get "/givemeyournameandage" (fun req -> let name = HttpParam.find req.param "name" in let age = HttpParam.find req.param "age" in create_response (Some ( HttpContent.TextHtml ( "<html><head><title>hello " ^ name ^ "</title></head>" ^ "<body><h3>you are " ^ age ^ " years old.</h3></body></html>") )) () ); run ()
「それっぽい感じで書けそうかな?」というのを確認した段階なので、肝心の「短くかけるか?」というのはあまり追求してない... 後で暇になったら頑張ろうかなと。
あと、ソースコードの配置とかMakefileとかSignature切ってないとかが、やっつけ感溢れるというか適当なので、これも暇になったら頑張りたい。
あと、OCamlのライブラリ依存を何とかするのが面倒で苦手なので、品質よりも簡単に使えること(できるだけ標準で用意されている環境で使いたい)優先で、HTTPサーバー的なところは自前で実装しています。この辺も結構適当にやってるので暇になったら頑張りたい。