Libzeep - это веб -фреймворк, написанная в C ++. Чтобы увидеть стартовый проект, посетите страницу Libzeep-Webapp-Starter.
Первоначально Libzeep был разработан, чтобы легко создавать мыльные серверы. А так как работа с SOAP означает, что на моем радаре не существовало работы с XML, и на моем радаре не было приличной библиотеки C ++ XML, я также создал полную библиотеку XML.
К сожалению (ну, учитывая работу, которую я проделал), REST оказался более популярным, чем SOAP, и поэтому я добавил лучшую реализацию JSON в версию 4 Libzeep, а также способ более легко создавать серверы отдыха.
Но затем мне пришлось использовать пружину в течение некоторого времени, и был впечатлен простотой создания интерактивных веб -приложений и думал, что я должен принести эту простоту в мир C ++. В конце концов, мои приложения нуждаются в необработанной скорости, и нет, Java не быстрая.
Нынешнее воплощение Libzeep, версия 6.0, является полностью рефакторным набором библиотек. Один для манипулирования XML, один для обработки JSON и один для создания веб -приложений.
XML-часть Libzeep состоит из подтверждающего анализатора, реализации узла DOM (-посветного (-посветного), поисковой системы XPath и писателя/форматера XML. Валидация работает на основе определений Doctype.
Обратите внимание, что Libzeep стремится предоставить полностью совместимый процессор XML, как указано организацией W3 (см.: Www.w3.org/tr/xml). Это означает, что он настолько строг, насколько требуется стандарт, и он прекращает обработку файла, когда встречается проверка хорошо сформированности, или когда документ кажется недействительным, когда он находится в режиме проверки. Отчет об ошибках осуществляется в этом случае.
Библиотека JSON сам по себе довольно проста. Есть гораздо лучшие альтернативы, если вы ищете только JSON. Но эта реализация требуется частью веб -приложения.
И тогда у нас есть библиотека веб -приложений. Этот делает очень легко создавать HTTP -сервер, который обслуживает HTML, но также говорит о отдыхе и мыле. Текущая реализация состоит из класса HTTP Server, в который вы можете добавить контроллеры. Каждый контроллер имеет префикс пути и обрабатывает запросы на некоторые записи в этом пути URI. Контроллер базового класса прост и на самом деле является просто базовым классом.
Контроллер HTML может использоваться в качестве базового класса, чтобы вы могли добавить методы, которые будут вызваны определенными путями URI. В сочетании с доступными процессорами тегов вы можете создать и вернуть динамические страницы XHTML.
Остальные и контроллеры SOAP также могут использоваться в качестве базовых классов для экспортных методов, которые занимают простые или сложные именованные параметры и возвращают конструкции данных JSON и SOAP соответственно.
Полную документацию можно найти по адресу:
www.hekkelman.com/libzeep-doc/
Чтобы построить Libzeep, вы должны установить Cmake.
Вы также должны установить библиотеку даты Говарда Хиннанта.
И, если вы не используете MacOS, рекомендуется установить MRC, чтобы получить поддержку ресурсов в Libzeep.
Команды по созданию Libzeep из командной строки, например:
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 Сначала создайте шаблон в XHTML, храните это как hello.xhtml в каталоге под названием 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 > Затем создайте исходный файл с именем http-server.cpp со следующим контентом:
# 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 ;
} Создайте файл 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)И настроить и создать приложение:
cmake .
cmake --build .А потом запустите:
./http-serverТеперь вы можете получить доступ к результату, используя следующий URL: