Libzeepは、C ++で記述されたWebアプリケーションフレームワークです。スタータープロジェクトを見るには、libzeep-webapp-starterページをご覧ください。
Libzeepはもともと、石鹸サーバーを簡単に作成できるように開発されました。また、SOAPを操作することはXMLを使用することを意味し、私のレーダーにはまともなC ++ XMLライブラリが存在しなかったため、完全なXMLライブラリも作成しました。
残念ながら(まあ、私がやった作業を考慮して)、RESTはSOAPよりも人気があることが証明されたため、Libzeepのバージョン4により良いJSON実装と、より簡単にRESTサーバーを作成する方法を追加しました。
しかし、その後、私はしばらくの間Springを使用する必要があり、インタラクティブなWebアプリケーションを構築するシンプルさに感銘を受け、C ++の世界にそのシンプルさをもたらすべきだと思いました。結局のところ、私のアプリケーションは生の速度が必要であり、いいえ、Javaは高速ではありません。
Libzeepの現在の化身であるバージョン6.0は、完全にリファクタリングされたライブラリのセットです。 1つはXMLを操作し、1つはJSONの処理用、もう1つはWebアプリケーションを構築するためです。
LIBZEEPのXML部分は、検証パーサー、DOM(-like)ノード実装、XPath検索エンジン、XMLライター/フォーマッタで構成されています。検証は、Doctypeの定義に基づいて機能します。
Libzeepは、W3組織で指定された完全に準拠したXMLプロセッサを提供することを目的としています(www.w3.org/tr/xmlを参照)。これは、標準が必要とするのと同じくらい厳格であることを意味し、適切な形式の検証に遭遇した場合、または検証モードのときにドキュメントが無効になっているように見える場合、ファイルの処理を停止します。この場合、エラー報告が行われます。
JSONライブラリ自体はかなり簡単です。 JSONだけを探している場合は、はるかに優れた選択肢があります。ただし、この実装はWebアプリケーションパーツで必要です。
そして、Webアプリケーションライブラリがあります。これにより、HTMLにサービスを提供するが、休息と石鹸を話すHTTPサーバーを簡単に構築できます。現在の実装は、コントローラーを追加できるHTTPサーバークラスで構成されています。各コントローラーにはパスプレフィックスがあり、このURIパスのいくつかのエントリのリクエストを処理します。基本クラスのコントローラーはシンプルで、実際には基本クラスにすぎません。
HTMLコントローラーはベースクラスとして使用できるため、特定のURIパスに呼び出されるメソッドを追加できます。利用可能なタグプロセッサと組み合わせて、動的XHTMLページを作成および返すことができます。
同様に、残りとSOAPコントローラーは、単純または複雑な名前のパラメーターを取得し、JSONとSOAPエンベロープデータ構造をそれぞれ返す方法をエクスポートするベースクラスとして使用できます。
完全なドキュメントは、次のように見つけることができます。
www.hekkelman.com/libzeep-doc/
libzeepを構築するには、cmakeをインストールする必要があります。
また、Howard Hinnants Date Libraryをインストールする必要があります。
また、MacOSを使用している場合を除き、Libzeepでリソースサポートを提供するためにMRCをインストールすることをお勧めします。
コマンドラインから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でテンプレートを作成し、 docrootと呼ばれるディレクトリにhello.xhtmlとしてこれを保存します。
<! 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を使用して結果にアクセスできます。