Eliom est un cadre pour créer des applications Web et mobiles client / serveur dans OCAML.
Il peut être utilisé à la fois comme un cadre Web traditionnel côté serveur ou pour implémenter des applications client-serveur complexes.
Eliom transforme OCAML en un langage à plusieurs niveaux, ce qui permet d'implémenter les parties du serveur et du client d'une application Web et mobile en tant que programme unique.
Cela simplifie beaucoup la communication entre le serveur et le client. Les applications peuvent s'exécuter sur n'importe quel navigateur Web ou appareil mobile (iOS, Android), en sauvant la nécessité de développer une version pour chaque plate-forme.
Eliom prend en charge les pages réactives (générées sur le serveur ou le client), le mécanisme de session avancé, la communication du serveur vers le client, la programmation Web basée sur la continuation, etc.
Eliom fait partie du projet OCSigen.
opam install eliom
Définition d'un service sur PATH /foo , en prenant tous les paramètres de 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 " ]])))Insertion d'un lien vers ce service, avec des paramètres:
Eliom_content.Html.D. a ~service: myservice [txt " Home " ] [( " param1 " , " v1 " ); ( " param2 " , " v2 " )]Les gestionnaires d'événements sont écrits dans OCAML:
div ~a: [a_onclick [ % client ( fun ev -> ... )]] [ ... ]Les côtés du côté client et du serveur sont écrits en un seul programme:
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 *)Utilisation d'une valeur côté serveur dans le code côté client:
let % server a = ...
let % client f () =
print_endline ~% a ; (* print in browser console *)
...Appel d'une fonction de serveur à partir du programme client:
let % rpc f (x : int ) : string Lwt. t = ... (* server-side code *)
let % client () =
let % lwt r = f 4 in
...Enregistrer les données de session sur le serveur à l'aide des références 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 );
...
Où la portée peut être:
Eliom_common.default_session_scope (valeur différente pour chaque navigateur),Eliom_common.default_process_scope (valeur différente pour chaque onglet),Eliom_common.default_group_scope (valeur différente pour chaque utilisateur),Eliom_common.site_scope (valeur pour l'ensemble du site),Eliom_common.global_scope (valeur globale pour l'ensemble du serveur). Les références Eliom sont persistantes si vous ajoutez un paramètre facultatif ~persistent pour fonctionner Eliom_reference.eref . Plus de documentation ici.
Écrivez votre première application Web et mobile avec Eliom en utilisant OCSigen Start