Libzeep adalah kerangka kerja aplikasi web yang ditulis dalam C ++. Untuk melihat proyek starter, kunjungi halaman Libzeep-Webapp-Starter.
Libzeep awalnya dikembangkan untuk membuatnya mudah membuat server sabun. Dan karena bekerja dengan SOAP berarti bekerja dengan XML dan tidak ada perpustakaan C ++ XML yang layak di radar saya, saya juga membuat perpustakaan XML lengkap.
Sayangnya (yah, mengingat pekerjaan yang saya lakukan), REST terbukti lebih populer daripada SOAP, dan jadi saya menambahkan implementasi JSON yang lebih baik ke versi 4 dari Libzeep serta cara untuk membuat server REST dengan lebih mudah.
Tetapi kemudian saya harus menggunakan Spring untuk beberapa waktu dan terkesan dengan kesederhanaan membangun aplikasi web interaktif dan berpikir saya harus membawa kesederhanaan itu ke dunia C ++. Bagaimanapun, aplikasi saya membutuhkan kecepatan mentah dan tidak, Java tidak cepat.
Inkarnasi Libzeep saat ini, versi 6.0, adalah set perpustakaan yang sepenuhnya refactored. Satu untuk memanipulasi XML, satu untuk menangani JSON dan satu untuk membangun aplikasi web.
Bagian XML dari Libzeep terdiri dari parser yang memvalidasi, implementasi simpul DOM (-Seike), mesin pencari XPath dan penulis XML/pemula. Validasi bekerja berdasarkan definisi Doctype.
Harap dicatat bahwa Libzeep bertujuan untuk menyediakan prosesor XML yang sepenuhnya sesuai sebagaimana ditentukan oleh organisasi W3 (lihat: www.w3.org/tr/xml). Ini berarti seketat standar yang dibutuhkan dan berhenti memproses file ketika validasi dari bentuk yang baik ditemui, atau ketika dokumen tampak tidak valid ketika sedang dalam mode memvalidasi. Pelaporan kesalahan dilakukan dalam kasus ini.
Perpustakaan JSON itu sendiri cukup sederhana. Ada banyak alternatif yang lebih baik jika Anda hanya mencari JSON. Tetapi implementasi ini diperlukan oleh bagian aplikasi web.
Dan kemudian kami memiliki pustaka aplikasi web. Yang ini membuatnya sangat mudah untuk membangun server HTTP yang melayani HTML tetapi juga berbicara istirahat dan sabun. Implementasi saat ini terdiri dari kelas server HTTP yang dapat Anda tambahkan pengontrol. Setiap pengontrol memiliki awalan jalur dan menangani permintaan untuk beberapa entri di jalur URI ini. Pengontrol kelas dasar sederhana dan sebenarnya hanyalah kelas dasar.
Pengontrol HTML dapat digunakan sebagai kelas dasar sehingga Anda dapat menambahkan metode yang akan dipanggil untuk jalur URI tertentu. Dalam kombinasi dengan prosesor tag yang tersedia, Anda kemudian dapat membuat dan mengembalikan halaman XHTML dinamis.
Pengontrol sisanya dan sabun juga dapat digunakan sebagai kelas dasar untuk mengekspor metode yang masing -masing mengambil parameter bernama sederhana atau kompleks dan mengembalikan struktur data JSON dan SOAP yang diselimuti SOAP.
Dokumentasi lengkap dapat ditemukan di:
www.hekkelman.com/libzeep-doc/
Untuk membangun libzeep, Anda harus memasang cmake.
Anda juga perlu menginstal perpustakaan tanggal Howard Hinnants.
Dan, kecuali Anda menggunakan macOS, disarankan untuk menginstal MRC untuk mendapatkan dukungan sumber daya di Libzeep.
Perintah untuk membangun libzeep dari baris perintah adalah misalnya:
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 Buat template di xhtml pertama, simpan ini sebagai hello.xhtml di direktori yang disebut 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 > Kemudian buat file sumber yang disebut http-server.cpp dengan konten berikut:
# 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 ;
} Buat file 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)Dan mengkonfigurasi dan membangun aplikasi:
cmake .
cmake --build .Dan kemudian jalankan:
./http-serverSekarang Anda dapat mengakses hasilnya menggunakan URL berikut: