Libzeep是用C ++编写的Web应用程序框架。要查看一个入门项目,请访问Libzeep-Webapp-starter页面。
Libzeep最初是为了使创建肥皂服务器的开发而开发。而且,由于使用SOAP意味着使用XML,并且雷达上没有像样的C ++ XML库,因此我也创建了一个完整的XML库。
不幸的是(考虑到我所做的工作),休息被证明比肥皂更受欢迎,因此我在Libzeep版本4上添加了更好的JSON实现,以及一种更轻松地创建REST服务器的方法。
但是后来我不得不使用Spring一段时间,对构建交互式Web应用程序的简单性印象深刻,并认为我应该将这种简单性带给C ++世界。毕竟,我的应用程序需要原始速度,而不是,Java不是快速的。
第6.0版Libzeep的当前化身是一组完全重构的库。一种用于操纵XML,一个用于处理JSON,另一个用于构建Web应用程序。
Libzeep的XML部分由验证解析器,DOM(类似)节点实现,XPATH搜索引擎和XML Writer/Formater组成。该验证基于Doctype的定义起作用。
请注意,Libzeep旨在提供W3组织指定的完全合规的XML处理器(请参阅:www.w3.org/tr/xml)。这意味着它与标准所需的一样严格,并且在遇到良好的验证时或文档处于验证模式时似乎无效时停止处理文件。在这种情况下,已完成错误报告。
JSON库本身相当简单。如果您只是寻找JSON,则有更好的选择。但是Web应用程序部分需要此实现。
然后我们有一个Web应用程序库。这使得构建服务于HTML但也可以说休息和肥皂的HTTP服务器非常容易。当前实现由HTTP服务器类组成,您可以添加控制器。每个控制器都有一个路径前缀,并处理此URI路径中某些条目的请求。基类控制器很简单,实际上只是基类。
HTML控制器可以用作基类,因此您可以添加某些URI路径的方法。结合可用的标签处理器,您可以创建并返回动态XHTML页面。
其余的和肥皂控制器同样可以用作基类,以导出分别采用简单或复杂的参数并分别返回JSON和SOAP包围数据结构的方法。
完整的文档可以找到:
www.hekkelman.com/libzeep-doc/
要构建Libzeep,必须安装CMAKE。
您还需要安装Howard Hinnants日期库。
而且,除非您使用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访问结果: