package yurt

  1. Overview
  2. Docs

Server contains the methods needed to build a Yurt server

include Cohttp_lwt.S.Server with module IO = Cohttp_lwt_unix.IO
module IO = Cohttp_lwt_unix.IO
type response_action = [
  1. | `Expert of Cohttp.Response.t * (IO.ic -> IO.oc -> unit Lwt.t)
  2. | `Response of Cohttp.Response.t * Cohttp_lwt.Body.t
]

A request handler can respond in two ways:

  • Using `Response, with a Response.t and a Body.t.
  • Using `Expert, with a Response.t and an IO function that is expected to write the response body. The IO function has access to the underlying IO.ic and IO.oc, which allows writing a response body more efficiently, stream a response or to switch protocols entirely (e.g. websockets). Processing of pipelined requests continue after the unitLwt.t is resolved. The connection can be closed by closing the IO.ic.
type t
val make_response_action : ?conn_closed:(conn -> unit) -> callback: (conn -> Cohttp.Request.t -> Cohttp_lwt.Body.t -> response_action Lwt.t) -> unit -> t
val make_expert : ?conn_closed:(conn -> unit) -> callback: (conn -> Cohttp.Request.t -> Cohttp_lwt.Body.t -> (Cohttp.Response.t * (IO.ic -> IO.oc -> unit Lwt.t)) Lwt.t) -> unit -> t
val make : ?conn_closed:(conn -> unit) -> callback: (conn -> Cohttp.Request.t -> Cohttp_lwt.Body.t -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t) -> unit -> t
val resolve_local_file : docroot:string -> uri:Uri.t -> string

Resolve a URI and a docroot into a concrete local filename.

Deprecated. Please use Cohttp.Path.resolve_local_file.

val respond : ?headers:Cohttp.Header.t -> ?flush:bool -> status:Cohttp.Code.status_code -> body:Cohttp_lwt.Body.t -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t

respond ?headers ?flush ~status ~body will respond to an HTTP request with the given status code and response body. If flush is true, then every response chunk will be flushed to the network rather than being buffered. flush is true by default. The transfer encoding will be detected from the body value and set to chunked encoding if it cannot be determined immediately. You can override the encoding by supplying an appropriate Content-length or Transfer-encoding in the headers parameter.

val respond_string : ?flush:bool -> ?headers:Cohttp.Header.t -> status:Cohttp.Code.status_code -> body:string -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
val respond_error : ?headers:Cohttp.Header.t -> ?status:Cohttp.Code.status_code -> body:string -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
val respond_redirect : ?headers:Cohttp.Header.t -> uri:Uri.t -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
val respond_need_auth : ?headers:Cohttp.Header.t -> auth:Cohttp.Auth.challenge -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
val respond_not_found : ?uri:Uri.t -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
val callback : t -> IO.conn -> IO.ic -> IO.oc -> unit Lwt.t
val resolve_file : docroot:string -> uri:Uri.t -> string
type server = {
  1. host : string;
  2. port : int;
  3. mutable routes : (string * Route.route * endpoint) list;
  4. mutable tls_config : Conduit_lwt_unix.server_tls_config option;
  5. mutable logger : Lwt_log.logger;
}
val server : ?tls_config:Conduit_lwt_unix.server_tls_config -> ?logger:Lwt_log.logger -> string -> int -> server

Create a new server

val server_from_config : string -> server

Create a new server from an existing configuration file

val log_debug : server -> string -> string -> unit
val log_info : server -> string -> string -> unit
val log_notice : server -> string -> string -> unit
val log_error : server -> string -> string -> unit
val log_fatal : server -> string -> string -> unit
val configure_tls : ?password:[ `Password of bool -> string | `No_password ] -> server -> string -> string -> server

Configure TLS after the server has been created

val stream : ?flush:bool -> ?headers:Header.t -> ?status:int -> string Lwt_stream.t -> (Response.t * Body.t) Lwt.t

Respond with a stream

val json : ?flush:bool -> ?headers:Header.t -> ?status:int -> Ezjsonm.t -> (Response.t * Body.t) Lwt.t

Respond with JSON data

val html : ?flush:bool -> ?headers:Header.t -> ?status:int -> Yurt_html.t -> (Response.t * Body.t) Lwt.t

Respond with HTML data

val string : ?flush:bool -> ?headers:Header.t -> ?status:int -> string -> (Response.t * Body.t) Lwt.t

Respond with string data

val redirect : ?headers:Header.t -> string -> (Response.t * Body.t) Lwt.t

Redirect client

val file : ?headers:Header.t -> string -> (Response.t * Body.t) Lwt.t

Respond with datas from file

val register : server -> (string * Route.route * endpoint) list -> server

Register a list of routes with the server

val register_route : server -> string -> Route.route -> endpoint -> server

Register a single route with the server

val register_route_string : server -> string -> string -> endpoint -> server

Register a single route, formatted as a string, with the server

val options : string -> endpoint -> server -> server

Register OPTIONS endpoint

val get : string -> endpoint -> server -> server

Register GET endpoint

val post : string -> endpoint -> server -> server

Register POST endpoint

val put : string -> endpoint -> server -> server

Register PUT endpoint

val update : string -> endpoint -> server -> server

Register UPDATE endpoint

val delete : string -> endpoint -> server -> server

Register delete endpoint

val static_file : string -> string -> server -> server

Regster endpoint that returns a single static file for all requests

val folder : string -> string -> server -> server

Reqister endpoint that will serve files from a firectory

val daemonize : ?directory:string -> ?syslog:bool -> server -> unit

Daemonize the server

exception Cannot_start_server
val start : server -> unit Lwt.t
val run : server -> unit
val (>|) : server -> (server -> server) -> server
val (>||) : server -> (server -> unit) -> server