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訪問結果: