Libzeep est un cadre d'application Web écrit en C ++. Pour voir un projet de démarrage, visitez la page Libzeep-Webapp-Starter.
Libzeep a été initialement développé pour faciliter la création de serveurs de savon. Et puisque travailler avec SOAP signifie travailler avec XML et aucune bibliothèque XML C ++ décente n'existait sur mon radar, j'ai également créé une bibliothèque XML complète.
Malheureusement (eh bien, compte tenu du travail que j'ai fait), REST s'est révélé plus populaire que le savon, et j'ai donc ajouté une meilleure implémentation JSON à la version 4 de Libzeep ainsi qu'un moyen de créer des serveurs de repos plus facilement.
Mais j'ai dû utiliser le printemps pendant un certain temps et j'ai été impressionné par la simplicité de la création d'applications Web interactives et j'ai pensé que je devrais apporter cette simplicité au monde C ++. Après tout, mes applications ont besoin d'une vitesse brute et non, Java n'est pas rapide.
L'incarnation actuelle de Libzeep, version 6.0, est un ensemble de bibliothèques entièrement refactorisé. Un pour manipuler XML, un pour gérer JSON et un pour la création d'applications Web.
La partie XML de Libzeep se compose d'un analyseur validant, d'une implémentation de nœud DOM (comme), d'un moteur de recherche XPATH et d'un écrivain / format XML. La validation fonctionne basée sur les définitions doctype.
Veuillez noter que Libzeep vise à fournir un processeur XML entièrement conforme comme spécifié par l'organisation W3 (voir: www.w3.org/tr/xml). Cela signifie qu'il est aussi strict que la norme le nécessite et ce qui cesse de traiter un fichier lorsqu'une validation de la bien formée est rencontrée, ou lorsqu'un document semble invalide lorsqu'il est en mode validation. Les rapports d'erreur sont effectués dans ce cas.
La bibliothèque JSON en soi est assez simple. Il existe de bien meilleures alternatives si vous cherchez juste JSON. Mais cette implémentation est requise par la pièce de l'application Web.
Et puis nous avons une bibliothèque d'applications Web. Celui-ci facilite la création d'un serveur HTTP qui sert HTML mais parle également de repos et de savon. L'implémentation actuelle se compose d'une classe de serveur HTTP à laquelle vous pouvez ajouter des contrôleurs. Chaque contrôleur a un préfixe de chemin et gère les demandes pour certaines entrées dans ce chemin URI. Le contrôleur de classe de base est simple et n'est en fait qu'une classe de base.
Le contrôleur HTML peut être utilisé comme classe de base afin que vous puissiez ajouter des méthodes qui seront appelées pour certains chemins URI. En combinaison avec les processeurs de balises disponibles, vous pouvez ensuite créer et retourner des pages XHTML dynamiques.
Les contrôleurs de repos et de savon peuvent également être utilisés comme classes de base pour exporter des méthodes qui prennent respectivement des paramètres nommés simples ou complexes et renvoient respectivement les structures de données JSON et SOAP.
Une documentation complète peut être trouvée à:
www.hekkelman.com/libzeep-doc/
Pour construire Libzeep, vous devez installer Cmake.
Vous devez également avoir installé Howard Hinnants Date Library.
Et, sauf si vous utilisez MacOS, il est recommandé d'installer MRC afin d'avoir un support de ressources dans Libzeep.
Les commandes pour construire libzeep à partir de la ligne de commande sont par exemple:
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 Créez d'abord un modèle dans xhtml, stockez-le comme hello.xhtml dans un répertoire appelé 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 > Créez ensuite un fichier source appelé http-server.cpp avec le contenu suivant:
# 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 ;
} Créer un fichier 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)Et configurer et créer l'application:
cmake .
cmake --build .Puis l'exécutez:
./http-serverVous pouvez maintenant accéder au résultat en utilisant les URL suivantes: