Eliom es un marco para construir aplicaciones web y móviles del cliente/servidor en OCAML.
Se puede utilizar tanto como un marco web tradicional del lado del servidor o para implementar aplicaciones complejas de cliente cliente.
Eliom transforma OCAML en un lenguaje de varios niveles, lo que permite implementar las partes del servidor y el cliente de una aplicación web y móvil como un solo programa.
Esto simplifica mucho la comunicación entre el servidor y el cliente. Las aplicaciones pueden ejecutarse en cualquier navegador web o dispositivo móvil (iOS, Android), ahorrando de la necesidad de desarrollar una versión para cada plataforma.
Eliom tiene soporte para páginas reactivas (generadas en servidor o cliente), mecanismo de sesión avanzado, comunicación de servidor a cliente, programación web basada en continuación, etc.
Eliom es parte del proyecto Ocsigen.
opam install eliom
Definición de un servicio en ruta /foo , tomando los parámetros GET:
let myservice =
Eliom_service. create
~path: ( Eliom_service. Path [ " foo " ])
~meth: ( Eliom_service. Get ( Eliom_parameter. any))
()
let () =
Eliom_registration.Html. register ~service: myservice
( fun get_params () ->
Lwt. return
Eliom_content.Html.F. (html (head (title (txt " " )))
(body [h1 [txt " Hello " ]])))Insertar un enlace para ese servicio, con parámetros:
Eliom_content.Html.D. a ~service: myservice [txt " Home " ] [( " param1 " , " v1 " ); ( " param2 " , " v2 " )]Los manejadores de eventos están escritos en OCAML:
div ~a: [a_onclick [ % client ( fun ev -> ... )]] [ ... ]El lado del cliente y el servidor están escritos como un solo programa:
let % server a = ... (* code for the server part of the application *)
let % client b = ... (* code for the client part of the application *)
let % shared c = ... (* code that will be included in both parts *)Uso de un valor del lado del servidor en el código del lado del cliente:
let % server a = ...
let % client f () =
print_endline ~% a ; (* print in browser console *)
...Llamar a una función de servidor desde el programa del cliente:
let % rpc f (x : int ) : string Lwt. t = ... (* server-side code *)
let % client () =
let % lwt r = f 4 in
...Guardar datos de sesión en el servidor utilizando referencias de eliom:
let % server r = Eliom_reference. eref ~scope: Eliom_common. default_session_scope 0
let % server f () =
let % lwt v = Eliom_reference. get r in
Eliom_reference. set r (v + 1 );
...
Donde puede estar el alcance:
Eliom_common.default_session_scope (valor diferente para cada navegador),Eliom_common.default_process_scope (valor diferente para cada pestaña),Eliom_common.default_group_scope (valor diferente para cada usuario),Eliom_common.site_scope (valor para todo el sitio),Eliom_common.global_scope (valor global para todo el servidor). Las referencias de eliom son persistentes si agrega parámetro opcional ~persistent a la función Eliom_reference.eref . Más documentación aquí.
Escriba su primera aplicación web y móvil con Eliom usando Ocsigen Start