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