Elli est un serveur Web que vous pouvez exécuter dans votre application Erlang pour exposer une API HTTP. Il vise exclusivement à créer des API HTTP à haut débit et à faible latence. Si la robustesse et les performances sont plus importantes pour vous que les fonctionnalités générales, alors Elli pourrait être fait pour vous. Si vous vous lancez dans la mise en œuvre d'un serveur Web, Elli pourrait être fait pour vous. Si vous créez des services Web, pas des sites Web, Elli pourrait être fait pour vous.
Elli nécessite OTP 22.0 ou plus récent.
Ajoutez elli
à votre application en tant que dépendance à votre rebar.config
:
{ deps , [
{ elli , " 3.3.0 " }
]}.
Ensuite, pour le compiler, vous pouvez exécuter :
rebar3 compile
Pour démarrer Elli dans un shell Erlang, exécutez :
rebar3 shell
% % starting elli
1 > { ok , Pid } = elli : start_link ([{ callback , elli_example_callback }, { port , 3000 }]).
La meilleure source pour apprendre à écrire un module de rappel est elli_example_callback
. Il existe également de nombreux exemples utilisés dans les tests ainsi que des descriptions de tous les événements.
Un module de rappel minimal ressemble à ceci :
- module ( elli_minimal_callback ).
- behaviour ( elli_handler ).
- include_lib ( " elli/include/elli.hrl " ).
- export ([ handle / 2 , handle_event / 3 ]).
handle ( Req , _Args ) ->
% % Delegate to our handler function
Method = Req # req . method ,
Path = elli_request : path ( Req ),
handle ( Method , Path , Req ).
handle ( 'GET' = _Method , [<< " hello " >>, << " world " >>] = _Path , _Req ) ->
% % Reply with a normal response. `ok' can be used instead of `200'
% % to signal success.
StatusCode = ok ,
Headers = [],
Body = << " Hello World! " >>,
{ StatusCode , Headers , Body };
handle ( _Method , _Path , _Req ) ->
{ 404 , [], << " Not Found " >>}.
% % @doc Handle request events: request completed, exception
% % thrown, client timeout, etc. Must return `ok'.
handle_event ( _Event , _Data , _Args ) ->
ok .
Pour ajouter elli
à un superviseur vous pouvez utiliser l'exemple suivant et l'adapter à vos besoins.
- module ( elli_minimal_sup ).
- behaviour ( supervisor ).
- export ([ start_link / 0 , init / 1 ]).
start_link () ->
SupName = { local , ? MODULE },
Module = ? MODULE ,
Args = [],
supervisor : start_link ( SupName , Module , Args ).
init ([] = _Args ) ->
ElliOpts = [
{ callback , elli_minimal_callback },
{ port , 3000 }
],
ElliSpec = {
_Id = elli_minimal_http ,
_Start = { elli , start_link , [ ElliOpts ]},
_Restart = permanent ,
_Shutdown = 5000 ,
_Worker = worker ,
_Modules = [ elli ]},
{ ok , {{ _Strategy = one_for_one , _Intensity = 5 , _Period = 10 }, [ ElliSpec ]} }.
Pour plus d'informations sur les fonctionnalités et la philosophie de conception d'Elli, consultez la overview
.
Elli est sous licence The MIT License.