Framework HTTP pour les applications REST en C.
Basé sur GNU Libmicrohttpd pour le serveur Web backend, Jansson pour la bibliothèque de manipulation json et Libcurl pour l'API client http/smtp.
Utilisé pour faciliter la création d'applications Web dans des programmes C avec une faible empreinte mémoire, comme dans les applications de systèmes embarqués.
Vous pouvez créer des services Web en mode HTTP ou HTTPS, diffuser des données ou implémenter des websockets de serveur.
Le code source d'un hello world utilisant Ulfius est le suivant :
/**
* test.c
* Small Hello World! example
* to compile with gcc, run the following command
* gcc -o test test.c -lulfius
*/
#include
#include
#define PORT 8080
/**
* Callback function for the web application on /helloworld url call
*/
int callback_hello_world ( const struct _u_request * request , struct _u_response * response , void * user_data ) {
ulfius_set_string_body_response ( response , 200 , "Hello World!" );
return U_CALLBACK_CONTINUE ;
}
/**
* main function
*/
int main ( void ) {
struct _u_instance instance ;
// Initialize instance with the port number
if ( ulfius_init_instance ( & instance , PORT , NULL , NULL ) != U_OK ) {
fprintf ( stderr , "Error ulfius_init_instance, abortn" );
return ( 1 );
}
// Endpoint list declaration
ulfius_add_endpoint_by_val ( & instance , "GET" , "/helloworld" , NULL , 0 , & callback_hello_world , NULL );
// Start the framework
if ( ulfius_start_framework ( & instance ) == U_OK ) {
printf ( "Start framework on port %dn" , instance . port );
// Wait for the user to press on the console to quit the application
getchar ();
} else {
fprintf ( stderr , "Error starting frameworkn" );
}
printf ( "End frameworkn" );
ulfius_stop_framework ( & instance );
ulfius_clean_instance ( & instance );
return 0 ;
}
Créez un webservice dans un thread séparé, le point de terminaison est identifié par sa méthode (ex : GET
, POST
, PUT
, DELETE
, etc.) et son chemin URL avec ses paramètres optionnels (ex : /api/doc/@id
). Le webservice est exécuté dans une fonction de rappel.
Diffusez une grande quantité de données avec une empreinte mémoire réduite.
Service Websocket, l'échange de messages websocket est exécuté dans des fonctions de rappel dédiées.
Le client http[s] et smtp demande l'exécution, la réponse est analysée dans une structure dédiée.
Exécution de la requête websocket du client, l'échange de messages websocket est exécuté dans des fonctions de rappel dédiées.
Créer une application de service Websocket
Créer une application cliente Websocket
CLI pour se connecter à un websocket distant : uwsc
Voir le fichier INSTALL.md pour les détails d'installation
Voir le fichier API.md pour plus de détails sur la documentation de l'API.
Consultez la documentation en ligne pour un format doxygen de la documentation de l'API.
Des exemples de programmes sont disponibles pour comprendre les différentes fonctionnalités disponibles, voir le dossier example_programs pour des exemples détaillés de codes sources et de documentation.
Des exemples de fonctions de rappel sont disponibles dans le dossier example_callbacks. Les exemples de fonctions de rappel disponibles sont :
Je suis ouvert aux questions et suggestions, n'hésitez pas à ouvrir un numéro, une pull request ou à m'envoyer un e-mail si vous en avez envie !