Ocaml 什么';使用Ocsigen服务JSON的标准方法是什么?

Ocaml 什么';使用Ocsigen服务JSON的标准方法是什么?,ocaml,ocsigen,Ocaml,Ocsigen,首先是一个将“Hello,world!”作为HTML提供的应用程序示例: 如何将其作为JSON?具体来说,如何注册JSON服务,以及应该使用什么库/组合器来生成/序列化JSON(js_of_ocaml?) 如果希望与客户端Eliom程序通信,则无需将数据序列化为JSON。任何OCaml类型的序列化/反序列化都由Eliom自动完成。只需使用OCaml服务(或者更简单:使用服务器函数并从OCaml客户端程序调用该函数) 如果您想使用自己的JSON格式,您需要有自己的JSON序列化函数(例如,使用一些

首先是一个将“Hello,world!”作为HTML提供的应用程序示例:

如何将其作为JSON?具体来说,如何注册JSON服务,以及应该使用什么库/组合器来生成/序列化JSON(js_of_ocaml?)

  • 如果希望与客户端Eliom程序通信,则无需将数据序列化为JSON。任何OCaml类型的序列化/反序列化都由Eliom自动完成。只需使用OCaml服务(或者更简单:使用服务器函数并从OCaml客户端程序调用该函数)
  • 如果您想使用自己的JSON格式,您需要有自己的JSON序列化函数(例如,使用一些ocaml库(如JSON wheel)来生成JSON)。在这种情况下,您可以使用Eliom_registration.String而不是Eliom_registration.Html5注册您的服务。处理程序函数必须以字符串形式返回JSON值,并返回内容类型
  • 甚至可以定义自己的注册模块,以代替Eliom_registration.String。因此,您可以使用JSON值的OCaml表示(您自己不需要调用序列化程序)。了解如何实现像Eliom_registration.String这样的模块

我不确定您想做什么,但是关于JSON,您可以使用“派生”(cf.)通过使用如下OCaml类型创建JSON类型:

    type deriving_t = (string * string) deriving (Json)
这将创建与OCaml类型对应的JSON类型

以下是使用此类型与服务器通信的方法(如果您不了解服务器功能,请参阅服务器端的“关于它”和“关于客户端”值):

(*首先必须创建一个服务器函数(这允许客户端从服务器调用函数*)
让我打电话给你=
服务器功能
Json.t
(乐趣(a,b)->
Lwt.return(打印尾行(“登录服务器:^a^b”))
(*假设酿酒厂已经生产了所有需要的原料(主服务、Foobar应用程序等)*)
让()=
Foobar_应用程序注册
~service:main_service
(乐趣()()->
{单位{
(*这里我直接使用ocaml类型调用我的服务器函数,它将自动序列化*)
忽略(%json_呼叫(“你好”,“世界”))
}};
返回
(Eliom_tools.F.html)
~title:“foobar”
~css:[[“css”;“foobar.css”]]
Html5.F.(正文)[
h2[pcdata“欢迎光临Eliom酿酒厂!”;
])))
如果您想使用一些客户机/服务器通信,您应该查看Eliom_总线、Eliom_comet或Eliom_react

(很抱歉,我不能创建超过2个链接:)但是您可以在ocsigen.org网站上找到文档)


希望能对您有所帮助。

json控制盘已经过时,请改用yojson
    type deriving_t = (string * string) deriving (Json)
    (* first you have to create a server function (this allowed the client to call a function from the server *)
    let json_call =
      server_function
        Json.t<deriving_t>
        (fun (a,b) ->
           Lwt.return (print_endline ("log on the server: "^a^b)))

    (* let say that distillery has already generate all the needed stuff (main_service, Foobar_app, etc..) *)
    let () =
      Foobar_app.register
        ~service:main_service
        (fun () () ->
           {unit{
             (* here I call my server function by using ocaml types directly, it will be automatically serialize *)
             ignore (%json_call ("hello", "world"))
           }};
           Lwt.return
             (Eliom_tools.F.html
                ~title:"foobar"
                ~css:[["css";"foobar.css"]]
                Html5.F.(body [
                   h2 [pcdata "Welcome from Eliom's distillery!"];
               ])))