# $ opam switch 4.02.1
$ opam install opium
$ opam install core
open Core_kernel.Std
module O = Opium.Std
type person = {
name: string;
age: int;
}
let json_of_person { name ; age } =
let open Ezjsonm in
dict [ "name", (string name)
; "age", (int age) ]
let print_param = O.put "/hello/:name" begin fun req ->
`String ("Hello " ^ O.param req "name") |> O.respond'
end
let print_person = O.get "/person/:name/:age" begin fun req ->
let person = {
name = O.param req "name";
age = "age" |> O.param req |> Int.of_string;
} in
`Json (person |> json_of_person |> Ezjsonm.wrap) |> O.respond'
end
let _ =
O.App.empty
|> print_param
|> print_person
|> O.App.run_command
$ corebuild -pkg opium,cow.syntax hello_world.native
$ ./hello_world.native
$ http get http://localhost:3000/foo/10
GET /person/foo/10 HTTP/1.1
Connection: keep-alive
Host: 127.0.0.1:3000
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: HTTPie/0.9.2
HTTP/1.1 200 OK
content-length: 25
content-type: application/json
[{"name":"foo","age":10}]