O Eliom é uma estrutura para criar aplicativos da Web e do servidor de clientes/servidores no OCAML.
Ele pode ser usado como uma estrutura da web tradicional do servidor ou para implementar aplicativos clientes-servidores complexos.
O ELIOM transforma o OCAML em uma linguagem de várias camadas, possibilitando implementar as partes do servidor e do cliente de um aplicativo Web e móvel como um único programa.
Isso simplifica muito a comunicação entre servidor e cliente. Os aplicativos podem ser executados em qualquer navegador da Web ou dispositivo móvel (iOS, Android), economizando da necessidade de desenvolver uma versão para cada plataforma.
O Eliom possui suporte para páginas reativas (geradas no servidor ou cliente), mecanismo de sessão avançado, comunicação de servidor para cliente, programação da Web baseada em continuação, etc.
Eliom faz parte do projeto OCSigen.
opam install eliom
Definindo um serviço no Path /foo , pegando qualquer 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 " ]])))Inserindo um link para esse serviço, com parâmetros:
Eliom_content.Html.D. a ~service: myservice [txt " Home " ] [( " param1 " , " v1 " ); ( " param2 " , " v2 " )]Os manipuladores de eventos estão escritos em OCAML:
div ~a: [a_onclick [ % client ( fun ev -> ... )]] [ ... ]Os lados do lado do cliente e do servidor são escritos como um único 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 *)Usando um valor do lado do servidor no código do lado do cliente:
let % server a = ...
let % client f () =
print_endline ~% a ; (* print in browser console *)
...Chamando uma função de servidor do programa Client:
let % rpc f (x : int ) : string Lwt. t = ... (* server-side code *)
let % client () =
let % lwt r = f 4 in
...Salvando os dados da sessão no servidor usando referências 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 );
...
Onde o escopo pode estar:
Eliom_common.default_session_scope (valor diferente para cada navegador),Eliom_common.default_process_scope (valor diferente para cada guia),Eliom_common.default_group_scope (valor diferente para cada usuário),Eliom_common.site_scope (valor para todo o site),Eliom_common.global_scope (valor global para todo o servidor). As referências do ELIOM são persistentes se você adicionar parâmetro opcional ~persistent para funcionar Eliom_reference.eref . Mais documentação aqui.
Escreva seu primeiro aplicativo da Web e móvel com o Eliom usando o OCSigen Start