Libzeep เป็นเฟรมเวิร์กแอปพลิเคชันเว็บที่เขียนใน C ++ หากต้องการดูโครงการเริ่มต้นให้ไปที่หน้า Libzeep-Webapp-Starter
Libzeep ได้รับการพัฒนาเพื่อให้ง่ายต่อการสร้างเซิร์ฟเวอร์สบู่ และเนื่องจากการทำงานกับ SOAP หมายถึงการทำงานกับ XML และไม่มีไลบรารี C ++ XML ที่เหมาะสมในเรดาร์ของฉันฉันจึงสร้างไลบรารี XML เต็มรูปแบบเช่นกัน
น่าเสียดายที่ (เมื่อพิจารณาถึงงานที่ฉันทำ) ส่วนที่เหลือได้รับการพิสูจน์แล้วว่าเป็นที่นิยมมากกว่าสบู่ดังนั้นฉันจึงเพิ่มการใช้งาน JSON ที่ดีขึ้นใน Libzeep รุ่นที่ 4 รวมถึงวิธีการสร้างเซิร์ฟเวอร์ REST ได้ง่ายขึ้น
แต่ฉันต้องใช้ฤดูใบไม้ผลิเป็นระยะเวลาหนึ่งและประทับใจกับความเรียบง่ายของการสร้างเว็บแอปพลิเคชันแบบโต้ตอบและคิดว่าฉันควรนำความเรียบง่ายมาสู่โลก C ++ ท้ายที่สุดแอปพลิเคชันของฉันต้องการความเร็วดิบและไม่ Java ไม่เร็ว
การจุติมาเกิดปัจจุบันของ Libzeep เวอร์ชัน 6.0 เป็นชุดห้องสมุดที่ได้รับการปรับปรุงใหม่อย่างสมบูรณ์ หนึ่งสำหรับการจัดการ XML หนึ่งสำหรับการจัดการ JSON และอีกอันสำหรับการสร้างเว็บแอปพลิเคชัน
ส่วน XML ของ Libzeep ประกอบด้วยตัวแยกวิเคราะห์ที่ตรวจสอบแล้วการใช้งานโหนด DOM (-like) เครื่องมือค้นหา XPATH และเครื่องมือนักเขียน/นักเขียน XML การตรวจสอบความถูกต้องทำงานตามคำจำกัดความของ doctype
โปรดทราบว่า Libzeep มีจุดมุ่งหมายเพื่อให้โปรเซสเซอร์ XML ที่สอดคล้องอย่างสมบูรณ์ตามที่ระบุโดยองค์กร W3 (ดู: www.w3.org/tr/xml) ซึ่งหมายความว่ามันเข้มงวดเท่าที่ต้องการมาตรฐานและหยุดการประมวลผลไฟล์เมื่อพบการตรวจสอบความถูกต้องที่ดีหรือเมื่อเอกสารดูเหมือนจะไม่ถูกต้องเมื่ออยู่ในโหมดตรวจสอบความถูกต้อง การรายงานข้อผิดพลาดจะทำในกรณีนี้
ห้องสมุด JSON ในตัวเองค่อนข้างง่าย มีทางเลือกที่ดีกว่ามากหากคุณกำลังมองหา Just JSON แต่การใช้งานนี้เป็นสิ่งจำเป็นโดยส่วนของเว็บแอปพลิเคชัน
จากนั้นเราก็มีไลบรารีเว็บแอปพลิเคชัน อันนี้ทำให้ง่ายต่อการสร้างเซิร์ฟเวอร์ HTTP ที่ให้บริการ HTML แต่ยังพูดถึงส่วนที่เหลือและสบู่ การใช้งานปัจจุบันประกอบด้วยคลาสเซิร์ฟเวอร์ HTTP ที่คุณสามารถเพิ่มคอนโทรลเลอร์ คอนโทรลเลอร์แต่ละตัวมีคำนำหน้าเส้นทางและจัดการคำขอสำหรับบางรายการในเส้นทาง URI นี้ ตัวควบคุมคลาสพื้นฐานนั้นง่ายและในความเป็นจริงเป็นเพียงคลาสพื้นฐาน
คอนโทรลเลอร์ HTML สามารถใช้เป็นคลาสพื้นฐานเพื่อให้คุณสามารถเพิ่มวิธีการที่จะเรียกใช้สำหรับเส้นทาง URI บางเส้นทาง เมื่อรวมกับโปรเซสเซอร์แท็กที่มีอยู่คุณสามารถสร้างและส่งคืนหน้า XHTML แบบไดนามิก
ตัวควบคุมส่วนที่เหลือและสบู่สามารถใช้เป็นคลาสพื้นฐานเพื่อส่งออกวิธีการที่ใช้พารามิเตอร์ที่มีชื่อง่ายหรือซับซ้อนและส่งคืน JSON และโครงสร้างข้อมูลที่ห่อหุ้มสบู่ตามลำดับ
เอกสารฉบับเต็มสามารถพบได้ที่:
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 ต่อไปนี้: