SinatraっぽいOCatraを書いてみた

先日、やっつけのWebサーバーを書く際にRubySinatraで書いてみたのですが、「簡単に書けて良いな〜」と思ったので、OCamlでもそれっぽいものを適当に作ってみました。

komamitsu/OCatra · GitHub

現状はこんな感じでかけます:

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サーバー的なところは自前で実装しています。この辺も結構適当にやってるので暇になったら頑張りたい。