HTTP-Framework für REST-Anwendungen in C.
Basierend auf GNU Libmicrohttpd für den Backend-Webserver, Jansson für die JSON-Manipulationsbibliothek und Libcurl für die http/smtp-Client-API.
Wird verwendet, um die Erstellung von Webanwendungen in C-Programmen mit geringem Speicherbedarf zu erleichtern, wie z. B. in eingebetteten Systemanwendungen.
Sie können Webservices im HTTP- oder HTTPS-Modus erstellen, Daten streamen oder Server-Websockets implementieren.
Der Quellcode einer Hallo-Welt mit Ulfius ist der folgende:
/**
* 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 ;
}
Erstellen Sie einen Webservice in einem separaten Thread. Der Endpunkt wird durch seine Methode (z. B. GET
, POST
, PUT
, DELETE
usw.) und seinen URL-Pfad mit seinen optionalen Parametern (z. B. /api/doc/@id
) identifiziert. Der Webservice wird in einer Callback-Funktion ausgeführt.
Streamen Sie große Datenmengen mit reduziertem Speicherbedarf.
Websocket-Dienst: Der Austausch von Websocket-Nachrichten wird in dedizierten Rückruffunktionen ausgeführt.
Client-HTTP[s]- und SMTP-Anforderungen werden ausgeführt, die Antwort wird in einer dedizierten Struktur analysiert.
Ausführung der Client-Websocket-Anfrage, der Austausch von Websocket-Nachrichten wird in dedizierten Rückruffunktionen ausgeführt.
Erstellen Sie eine WebSocket-Dienstanwendung
Erstellen Sie eine WebSocket-Clientanwendung
CLI zum Herstellen einer Verbindung zu einem Remote-Websocket: uwsc
Einzelheiten zur Installation finden Sie in der Datei INSTALL.md
Einzelheiten zur API-Dokumentation finden Sie in der Datei API.md
Ein Doxygen-Format der API-Dokumentation finden Sie in der Online-Dokumentation.
Es stehen Beispielprogramme zur Verfügung, um die verschiedenen verfügbaren Funktionen zu verstehen. Detaillierte Beispielquellcodes und Dokumentation finden Sie im Ordner „example_programs“.
Beispiel-Callback-Funktionen sind im Ordner example_callbacks verfügbar. Die verfügbaren Beispiel-Rückruffunktionen sind:
Ich bin offen für Fragen und Anregungen, eröffne gerne ein Issue, einen Pull Request oder schick mir eine E-Mail, wenn du Lust hast!