Estrutura HTTP para aplicativos REST em C.
Baseado em GNU Libmicrohttpd para o servidor web backend, Jansson para a biblioteca de manipulação json e Libcurl para a API do cliente http/smtp.
Usado para facilitar a criação de aplicações web em programas C com um pequeno consumo de memória, como em aplicações de sistemas embarcados.
Você pode criar webservices no modo HTTP ou HTTPS, transmitir dados ou implementar websockets de servidor.
O código fonte de um hello world usando Ulfius é o seguinte:
/**
* 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 ;
}
Crie um webservice em uma thread separada, o endpoint é identificado por seu método (ex: GET
, POST
, PUT
, DELETE
, etc.) e seu caminho URL com seus parâmetros opcionais (ex: /api/doc/@id
). O webservice é executado em uma função de retorno de chamada.
Transmita uma grande quantidade de dados com um consumo de memória reduzido.
Serviço Websocket, a troca de mensagens do websocket é executada em funções de retorno de chamada dedicadas.
Execução de solicitações http[s] e smtp do cliente, a resposta é analisada em uma estrutura dedicada.
Execução da solicitação do websocket do cliente, a troca de mensagens do websocket é executada em funções de retorno de chamada dedicadas.
Crie um aplicativo de serviço websocket
Criar aplicativo cliente websocket
CLI para conectar-se a um websocket remoto: uwsc
Consulte o arquivo INSTALL.md para obter detalhes de instalação
Consulte o arquivo API.md para obter detalhes da documentação da API
Consulte a documentação on-line para obter um formato doxygen da documentação da API.
Programas de exemplo estão disponíveis para entender as diferentes funcionalidades disponíveis. Consulte a pasta example_programs para exemplos detalhados de códigos-fonte e documentação.
Funções de retorno de chamada de exemplo estão disponíveis na pasta example_callbacks. Os exemplos de funções de retorno de chamada disponíveis são:
Estou aberto para dúvidas e sugestões, fique à vontade para abrir um issue, um pull request ou me enviar um e-mail se desejar!