首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Ocsigen为JSON提供服务的规范方法是什么?

使用Ocsigen为JSON提供服务的规范方法是什么?
EN

Stack Overflow用户
提问于 2013-06-13 06:39:59
回答 2查看 706关注 0票数 3

Ocsigen/Eliom tutorial以一个提供"Hello,world!“的应用程序示例开始。作为HTML:

代码语言:javascript
运行
复制
open Eliom_content.Html5.D

let main_service =
  Eliom_registration.Html5.register_service
    ~path:["graff"]
    ~get_params:Eliom_parameter.unit
    (fun () () ->
      Lwt.return
         (html
           (head (title (pcdata "Page title")) [])
           (body [h1 [pcdata "Graffiti"]])))

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-13 23:57:47

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

代码语言:javascript
运行
复制
    type deriving_t = (string * string) deriving (Json)

这将创建与OCaml类型相对应的JSON类型。

这里是使用这种类型与服务器通信的方法(如果你不知道服务器的功能,这里是关于它的documentation和关于服务器端的客户端值):

代码语言:javascript
运行
复制
    (* 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!"];
               ])))

如果你想使用一些客户端/服务器通信,你应该看看Eliom_bus,Eliom_comet或者Eliom_react。

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

希望这能对你有所帮助。

票数 5
EN

Stack Overflow用户

发布于 2013-06-13 23:39:29

JSON如果您想要与客户端Eliom程序通信,则不需要将数据序列化为。任何OCaml类型的序列化/反序列化都是由Eliom自动完成的。只需使用OCaml服务(或者,更简单:服务器函数并从您的OCaml客户端程序调用函数)。

  • 如果您想使用自己的JSON格式,您需要有自己的JSON序列化函数(或者例如使用一些ocaml库,如JSON-来生成JSON)。在这种情况下,您可以使用Eliom_registration.String而不是Eliom_registration.Html5注册您的服务。处理程序函数必须以字符串形式返回JSON值,并且content-type.
  • It甚至可以定义您自己的注册模块,以代替Eliom_registration.String。因此,您可以使用JSON值的OCaml表示(并且不需要自己调用序列化程序)。看看像Eliom_registration.String这样的模块是如何实现的,以了解如何做到这一点。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17076575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档