5b50279851
The new version of ocplib-resto : - uses jbuilder ; - is functorized over `Json_encoding` rather than `Json_repr` ; - handles query parameters ; - handles HTTP methods (GET, POST, DELETE, PUT, PATCH) ; - replaces `custom_service` by a more generic trailer argument ; - replaces generic answer `(code, body)` by a more ad-hoc sum type (allowing distinct encoding for success and error) ; - includes a minimal HTTP-server based on Cohttp (includings CORS and media type negotiation). - adds a function `Directory.transparent_lookup` to lookup/call a service handler without serializing the various parameters (path, query, request body). As a first consequences in Tezos, this patch allows binary communication between the client and the node. This patch tries to be minimal inside the tezos source code and therefore it introduces a minimal compatibility layer in `RPC.ml`. This code should be removed as soon as possible.
48 lines
1.7 KiB
OCaml
48 lines
1.7 KiB
OCaml
(**************************************************************************)
|
|
(* ocplib-resto *)
|
|
(* Copyright (C) 2016, OCamlPro. *)
|
|
(* *)
|
|
(* All rights reserved. This file is distributed under the terms *)
|
|
(* of the GNU Lesser General Public License version 2.1, with the *)
|
|
(* special exception on linking described in the file LICENSE. *)
|
|
(* *)
|
|
(**************************************************************************)
|
|
|
|
open Services
|
|
|
|
include RestoDirectory.MakeDirectory(RestoJson.Encoding)
|
|
|
|
let rec repeat i json =
|
|
if i <= 0 then []
|
|
else json :: repeat (i-1) json
|
|
|
|
let dir = empty
|
|
let dir =
|
|
register1 dir repeat_service
|
|
(fun i () json -> Lwt.return (`Ok (`A (repeat i json))))
|
|
let dir =
|
|
register1 dir add_service
|
|
(fun i () j -> Lwt.return (`Ok (i+j)))
|
|
let dir =
|
|
register2 dir alternate_add_service
|
|
(fun i j () () -> Lwt.return (`Ok (float_of_int i+.j)))
|
|
let dir =
|
|
register dir alternate_add_service'
|
|
(fun (i,j) () () -> Lwt.return (`Ok (i+j)))
|
|
let dir =
|
|
register dir dummy_service
|
|
(fun ((((((((),_a), _b), _c), _d), _e), _f), _g) () () -> Lwt.return (`Ok ()))
|
|
|
|
let dir =
|
|
register_dynamic_directory1 dir prefix_dir1
|
|
(fun _ ->
|
|
let prefixed_dir = empty in
|
|
let prefixed_dir =
|
|
register2 prefixed_dir minus_service
|
|
(fun i j () () -> Lwt.return (`Ok (i -. float_of_int j))) in
|
|
Lwt.return prefixed_dir)
|
|
|
|
let dir =
|
|
register_describe_directory_service
|
|
dir describe_service
|