ocaml-dispatch provides a basic mechanism for dispatching a request to a
handler based on hierarchical path names conventionally found in URIs. It can be
used both for dispatching requests in a server, as well as handing changes to
hierarchical fragments in a client-side application.
Install the library and its depenencies via OPAM:
opam install dispatch
To install development versions of the library, pin the package from the root
of the repository:
opam pin add .
You can install the latest changes by commiting them to the local git
repository and running:
opam upgrade dispatch
For building and running the tests during development, you will need to install
oUnit package and reconfigure the build process to enable tests:
opam install oUnit dune runtest
Dispatch is designed to work with whatever sort of handler you care to use,
whether it's synchronous, Lwt-based, or Async-based. Here's a simple example of
Dispatch.DSL module to setup routing for a "Hello, World!" server.
The example assumes a
Server module and
request type, and that handlers
should return strings that will be interpreted as the body of the response.
open Dispatch let hello_handler keys rest request = let who = try List.assoc "who" keys with Not_found -> "World" in Printf.sprintf "Hello, %s!" who ;; let handler request = let table = [ "/" , hello_handler ; "/hello/:who/", hello_handler ] in match DSL.dispatch table request.path with | Result.Ok handler -> handler request | Result.Error _ -> "Not found!" ;; let _ = Server.start handler
BSD3, see LICENSE file for its text.