resto

A minimal OCaml library for type-safe HTTP/JSON RPCs
IN THIS PACKAGE
Module Resto . MakeService

Parameters

Signature

type (+'meth, 'prefix, 'params, 'query, 'input, 'output, 'error) t constraint 'meth = [< meth ]
type (+'meth, 'prefix, 'params, 'query, 'input, 'output, 'error) service = ( 'meth, 'prefix, 'params, 'query, 'input, 'output, 'error ) t
val meth : ( 'meth, 'prefix, 'params, 'query, 'input, 'output, 'error ) service -> 'meth
val query : ( 'meth, 'prefix, 'params, 'query, 'input, 'output, 'error ) service -> 'query Query.t
type _ input =
| No_input : unit input
| Input : 'input Encoding.t -> 'input input
val input_encoding : ( 'meth, 'prefix, 'params, 'query, 'input, 'output, 'error ) service -> 'input input
val output_encoding : ( 'meth, 'prefix, 'params, 'query, 'input, 'output, 'error ) service -> 'output Encoding.t
val error_encoding : ( 'meth, 'prefix, 'params, 'query, 'input, 'output, 'error ) service -> 'error Encoding.t
val get_service : ?description:string -> query:'query Query.t -> output:'output Encoding.t -> error:'error Encoding.t -> ( 'prefix, 'params ) Path.t -> ( [ `GET ], 'prefix, 'params, 'query, unit, 'output, 'error ) service

get_service ?description ~query ~output ~error path is a GET service that is intended to seat at the URI described by path and receive the additional parameters described by query. The value output (resp. error) describe the representation of the successful (resp. failed) returned value for the service.

Note that, whilst get_service declares a service, the resulting service is not registered yet. This is handled in Resto_directory.

post_service, delete_service, put_service, and patch_service are similar to get_service but for the other HTTP methods.

Note that some of these functions take an additional input argument. This is only for the services with methods that expect additional parameters. It is used internally to encode/decode additional parameters passed in a dedicated payload rather than in the path/query parameters.

val post_service : ?description:string -> query:'query Query.t -> input:'input Encoding.t -> output:'output Encoding.t -> error:'error Encoding.t -> ( 'prefix, 'params ) Path.t -> ( [ `POST ], 'prefix, 'params, 'query, 'input, 'output, 'error ) service
val delete_service : ?description:string -> query:'query Query.t -> output:'output Encoding.t -> error:'error Encoding.t -> ( 'prefix, 'params ) Path.t -> ( [ `DELETE ], 'prefix, 'params, 'query, unit, 'output, 'error ) service
val patch_service : ?description:string -> query:'query Query.t -> input:'input Encoding.t -> output:'output Encoding.t -> error:'error Encoding.t -> ( 'prefix, 'params ) Path.t -> ( [ `PATCH ], 'prefix, 'params, 'query, 'input, 'output, 'error ) service
val put_service : ?description:string -> query:'query Query.t -> input:'input Encoding.t -> output:'output Encoding.t -> error:'error Encoding.t -> ( 'prefix, 'params ) Path.t -> ( [ `PUT ], 'prefix, 'params, 'query, 'input, 'output, 'error ) service
val prefix : ( 'prefix, 'inner_prefix ) Path.t -> ( 'meth, 'inner_prefix, 'params, 'query, 'input, 'output, 'error ) service -> ( 'meth, 'prefix, 'params, 'query, 'input, 'output, 'error ) service
val subst0 : ( [< meth ] as 'm, 'p, 'p, 'q, 'i, 'o, 'e ) service -> ( 'm, 'p2, 'p2, 'q, 'i, 'o, 'e ) service
val subst1 : ( [< meth ] as 'm, 'p, 'p * 'a, 'q, 'i, 'o, 'e ) service -> ( 'm, 'p2, 'p2 * 'a, 'q, 'i, 'o, 'e ) service
val subst2 : ( [< meth ] as 'm, 'p, ('p * 'a) * 'b, 'q, 'i, 'o, 'e ) service -> ( 'm, 'p2, ('p2 * 'a) * 'b, 'q, 'i, 'o, 'e ) service
val subst3 : ( [< meth ] as 'm, 'p, (('p * 'a) * 'b) * 'c, 'q, 'i, 'o, 'e ) service -> ( 'm, 'p2, (('p2 * 'a) * 'b) * 'c, 'q, 'i, 'o, 'e ) service
type ('prefix, 'params, 'error) description_service = ( [ `GET ], 'prefix, 'params * string list, Description.request, unit, Encoding.schema Description.directory, 'error ) service
val description_service : ?description:string -> 'error Encoding.t -> ( 'prefix, 'params ) Path.t -> ( 'prefix, 'params, 'error ) description_service
type 'input request = {
meth : meth;
uri : Uri.t;
input : 'input input;
}
val forge_request : ( 'meth, unit, 'params, 'query, 'input, 'output, 'error ) service -> ?base:Uri.t -> 'params -> 'query -> 'input request
val forge_partial_request : ( 'meth, 'prefix, 'params, 'query, 'input, 'output, 'error ) service -> ?base:Uri.t -> 'params -> 'query -> 'input request
module Internal : sig ... end