Libzeep es un marco de aplicaciones web escrito en C ++. Para ver un proyecto de inicio, visite la página Libzeep-Webapp-Starter.
Libzeep se desarrolló originalmente para facilitar la creación de servidores de jabón. Y dado que trabajar con SOAP significa trabajar con XML y no existía una biblioteca XML C ++ decente en mi radar, también creé una biblioteca XML completa.
Desafortunadamente (bueno, teniendo en cuenta el trabajo que hice), REST demostró ser más popular que SOAP, por lo que agregué una mejor implementación de JSON a la versión 4 de Libzeep, así como una forma de crear servidores REST más fácilmente.
Pero luego tuve que usar la primavera durante algún tiempo y me impresionó la simplicidad de construir aplicaciones web interactivas y pensé que debería traer esa simplicidad al mundo C ++. Después de todo, mis aplicaciones necesitan velocidad cruda y no, Java no es rápido.
La encarnación actual de Libzeep, versión 6.0, es un conjunto de bibliotecas completamente refactorizado. Uno para manipular XML, uno para manejar JSON y otro para crear aplicaciones web.
La parte XML de Libzeep consiste en un analizador de validación, una implementación de nodo DOM (similar a la), un motor de búsqueda XPath y un escritor/formateador XML. La validación funciona en función de las definiciones DOCTYPE.
Tenga en cuenta que Libzeep tiene como objetivo proporcionar un procesador XML totalmente compatible según lo especificado por la organización W3 (ver: www.w3.org/tr/xml). Esto significa que es tan estricto como lo requiere el estándar y deja de procesar un archivo cuando se encuentra una validación del bien formado, o cuando un documento parece ser inválido cuando está en modo de validación. El informe de errores se realiza en este caso.
La biblioteca JSON en sí misma es bastante simple. Hay alternativas mucho mejores si estás buscando solo JSON. Pero esta implementación es requerida por la parte de la aplicación web.
Y luego tenemos una biblioteca de aplicaciones web. Este hace que sea muy fácil construir un servidor HTTP que sirva a HTML pero que también habla descanso y jabón. La implementación actual consiste en una clase de servidor HTTP a la que puede agregar controladores. Cada controlador tiene un prefijo de ruta y maneja las solicitudes de algunas entradas en esta ruta URI. El controlador de clase base es simple y, de hecho, es solo una clase base.
El controlador HTML se puede usar como clase base para que pueda agregar métodos que se solicitarán para ciertas rutas de URI. En combinación con los procesadores de etiquetas disponibles, puede crear y devolver las páginas XHTML dinámicas.
Los controladores REST y SOAP también se pueden usar como clases base para exportar métodos que toman parámetros con nombre simples o complejos y devuelven las estructuras de datos envueltas JSON y SOAP respectivamente.
La documentación completa se puede encontrar en:
www.hekkelman.com/libzeep-doc/
Para construir Libzeep debe tener instalado CMake.
También debe haber instalado la biblioteca de fecha Howard Hinnants.
Y, a menos que esté utilizando macOS, se recomienda instalar MRC para tener soporte de recursos en Libzeep.
Los comandos para construir Libzeep desde la línea de comandos son, por ejemplo,
git clone https://github.com/mhekkel/libzeep
cd libzeep
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
ctest --test-dir build
cmake --install build Cree una plantilla en xhtml primero, almacene esto como hello.xhtml en un directorio llamado docroot :
<! DOCTYPE html SYSTEM "about:legacy-compat">
< html xmlns = " http://www.w3.org/1999/xhtml "
xmlns : z = " http://www.hekkelman.com/libzeep/m2 " >
< head >
< title >Hello</ title >
</ head >
< p >Hello, < span z : text = " ${name ?: 'world'} " />!</ p >
</ html > Luego cree un archivo fuente llamado http-server.cpp con el siguiente contenido:
# define WEBAPP_USES_RESOURCES 0
# include < zeep/http/server.hpp >
# include < zeep/http/html-controller.hpp >
# include < zeep/http/template-processor.hpp >
class hello_controller : public zeep ::http::html_controller
{
public:
hello_controller ()
{
map_get ( " " , &hello_controller::handle_index, " name " );
map_get ( " index.html " , &hello_controller::handle_index, " name " );
map_get ( " hello/{name} " , &hello_controller::handle_index, " name " );
}
zeep::http::reply handle_index ( const zeep::http::scope& scope,
std::optional<std::string> user)
{
zeep::http::scope sub (scope);
sub. put ( " name " , user. value_or ( " world " ));
return get_template_processor (). create_reply_from_template ( " hello.xhtml " , sub);
}
};
int main ()
{
zeep::http::server srv ( std::filesystem::canonical ( " docroot " ));
srv. add_controller ( new hello_controller ());
srv. bind ( " :: " , 8080 );
srv. run ( 2 );
return 0 ;
} Cree un archivo CMakeLists.txt :
cmake_minimum_required ( VERSION 3.16)
project (http-server LANGUAGES CXX)
set (CXX_EXTENSIONS OFF )
set (CMAKE_CXX_STANDARD 17)
set (CMAKE_CXX_STANDARD_REQUIRED ON )
find_package (zeep REQUIRED)
add_executable (http-server http-server.cpp)
target_link_libraries (http-server zeep::zeep)Y configurar y crear la aplicación:
cmake .
cmake --build .Y luego ejecutarlo:
./http-serverAhora puede acceder al resultado utilizando las siguientes URL: