Libzeep은 C ++로 작성된 웹 응용 프로그램 프레임 워크입니다. 스타터 프로젝트를 보려면 Libzeep-Webapp-Starter 페이지를 방문하십시오.
Libzeep은 원래 비누 서버를 쉽게 만들 수 있도록 개발되었습니다. SOAP로 작업한다는 것은 XML로 작업하고 레이더에 괜찮은 C ++ XML 라이브러리가 존재하지 않기 때문에 전체 XML 라이브러리도 만들었습니다.
불행히도 (글쎄, 내가 한 작업을 고려할 때) REST는 SOAP보다 인기가 높았으므로 Libzeep의 버전 4에 더 나은 JSON 구현과 REST 서버를보다 쉽게 만들 수있는 방법을 추가했습니다.
그러나 나는 한동안 Spring을 사용해야했고 대화식 웹 응용 프로그램을 구축하는 것이 단순성에 깊은 인상을 받았으며 그 단순성을 C ++ 세계에 가져와야한다고 생각했습니다. 결국, 내 응용 프로그램에는 원시 속도가 필요하며, Java는 빠르지 않습니다.
Libzeep 버전 6.0의 현재 화신은 완전히 리팩토링 된 라이브러리 세트입니다. 하나는 XML을 조작하고 하나는 JSON을 처리하고 웹 애플리케이션을 구축하기위한 것입니다.
Libzeep의 XML 부분은 검증 된 파서, DOM (-like) 노드 구현, XPath 검색 엔진 및 XML Writer/Formatter로 구성됩니다. 유효성 검사는 DocType 정의를 기반으로 작동합니다.
Libzeep은 W3 조직에서 지정된 완전히 준수하는 XML 프로세서를 제공하는 것을 목표로합니다 (www.w3.org/tr/xml 참조). 이는 표준이 요구하는만큼 엄격하고 잘 형성되는 유효성 검증이 발생하거나 검증 모드에있을 때 문서가 유효하지 않은 경우 파일 처리를 중지합니다. 이 경우 오류보고가 수행됩니다.
JSON 라이브러리 자체는 상당히 간단합니다. JSON 만 찾고 있다면 훨씬 더 나은 대안이 있습니다. 그러나이 구현은 웹 응용 프로그램 부분에서 필요합니다.
그런 다음 웹 애플리케이션 라이브러리가 있습니다. 이를 통해 HTML을 제공하지만 휴식과 비누를 사용하는 HTTP 서버를 쉽게 구축 할 수 있습니다. 현재 구현은 컨트롤러를 추가 할 수있는 HTTP 서버 클래스로 구성됩니다. 각 컨트롤러에는 경로 접두사가 있으며이 URI 경로의 일부 항목에 대한 요청을 처리합니다. 기본 클래스 컨트롤러는 간단하며 실제로는 기본 클래스 일뿐입니다.
HTML 컨트롤러는 기본 클래스로 사용할 수 있으므로 특정 URI 경로를 요구하는 메소드를 추가 할 수 있습니다. 사용 가능한 태그 프로세서와 함께 동적 XHTML 페이지를 작성하고 반환 할 수 있습니다.
나머지 및 비누 컨트롤러도 마찬가지로 간단하거나 복잡한 매개 변수를 취하고 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을 사용하여 결과에 액세스 할 수 있습니다.