Libzeep ist ein in C ++ geschriebenes Web -Anwendungs -Framework. Besuchen Sie ein Starterprojekt auf der Seite Libzeep-Webapp-Starter.
Libzeep wurde ursprünglich entwickelt, um es einfach zu machen, Seifenserver zu erstellen. Und da die Arbeit mit Seife bedeutet, mit XML zu arbeiten und keine anständige C ++ XML -Bibliothek auf meinem Radar zu existieren, habe ich auch eine vollständige XML -Bibliothek erstellt.
Leider (na ja, in Anbetracht der Arbeit, die ich geleistet habe) erwies sich REST als beliebter als Seife, und so habe ich Version 4 von Libzeep eine bessere JSON -Implementierung sowie eine Möglichkeit hinzugefügt, Ruhserver leichter zu erstellen.
Aber dann musste ich Frühling einige Zeit verwenden und war beeindruckt von der Einfachheit, interaktive Webanwendungen aufzubauen, und dachte, ich sollte diese Einfachheit in die C ++ - Welt bringen. Schließlich benötigen meine Anwendungen eine Rohgeschwindigkeit und nein, Java ist nicht schnell.
Die aktuelle Inkarnation von Libzeep, Version 6.0, ist ein vollständig neu neuer Bibliothekssatz. Eine zum Manipulieren von XML, eine zum Umgang mit JSON und eine zum Erstellen von Webanwendungen.
Der XML-Teil von Libzeep besteht aus einem validierenden Parser, einer DOM-Knoten-Implementierung, einer XPath-Suchmaschine und einem XML-Schriftsteller/-formatierer. Die Validierung funktioniert auf docType -Definitionen.
Bitte beachten Sie, dass Libzeep darauf abzielt, einen vollständig konformen XML -Prozessor zu liefern, wie von der W3 -Organisation angegeben (siehe: www.w3.org/tr/xml). Dies bedeutet, dass es so streng ist, wie der Standard erfordert, und es wird nicht mehr eine Datei verarbeitet, wenn eine Validierung der Wohltatseinheit auftritt oder wenn ein Dokument im Validierungsmodus ungültig zu sein scheint. Die Fehlerberichterstattung erfolgt in diesem Fall.
Die JSON -Bibliothek an sich ist ziemlich einfach. Es gibt viel bessere Alternativen, wenn Sie nur JSON suchen. Diese Implementierung ist jedoch vom Webanwendungsteil erforderlich.
Und dann haben wir eine Webanwendungsbibliothek. Dies macht es sehr einfach, einen HTTP -Server zu erstellen, der HTML dient, aber auch Ruhe und Seife spricht. Die aktuelle Implementierung besteht aus einer HTTP -Serverklasse, zu der Sie Controller hinzufügen können. Jeder Controller verfügt über ein Pfadpräfix und behandelt Anfragen für einige Einträge in diesem URI -Pfad. Der Basisklassencontroller ist einfach und tatsächlich nur eine Basisklasse.
Der HTML -Controller kann als Basisklasse verwendet werden, sodass Sie Methoden hinzufügen können, die für bestimmte URI -Pfade aufgerufen werden. In Kombination mit den verfügbaren Tag -Prozessoren können Sie dynamische XHTML -Seiten erstellen und zurückgeben.
Die Rest- und SOAP -Controller können ebenfalls als Basisklassen verwendet werden, um Methoden zu exportieren, die einfache oder komplex benannte Parameter einnehmen und JSON- und SOAP -umhüllte Datenstrukturen zurückgeben.
Die vollständige Dokumentation finden Sie unter:
www.hekkelman.com/libzeep-doc/
Um Libzeep zu bauen, müssen Sie CMake installieren lassen.
Sie müssen auch Howard Hinnants Date Library installiert haben.
Wenn Sie macOS, sofern Sie nicht verwenden, wird empfohlen, MRC zu installieren, um Ressourcenunterstützung in Libzeep zu erhalten.
Die Befehle, um Libzeep aus der Befehlszeile zu erstellen, sind z. B.: zB:
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 Erstellen Sie zuerst eine Vorlage in XHTML und speichern Sie diese als hello.xhtml in einem Verzeichnis namens 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 > Erstellen Sie dann eine Quelldatei mit dem Namen http-server.cpp mit dem folgenden Inhalt:
# 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 ;
} Erstellen Sie eine CMakeLists.txt -Datei:
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)Und konfigurieren und erstellen Sie die App:
cmake .
cmake --build .Und dann laufen Sie:
./http-serverJetzt können Sie mit den folgenden URLs auf das Ergebnis zugreifen: