C++ के लिए Swagger/OpenAPI जनरेशन: टूल्स और लाइब्रेरीज़ का अवलोकन
C++ में सर्वर एप्लिकेशन का आधुनिक विकास शायद ही कभी REST API के बिना होता है। OpenAPI स्पेसिफिकेशन (जिसे पहले Swagger के नाम से जाना जाता था) क्लाइंट और सर्वर के बीच इंटरफेस का वर्णन करने के लिए एक उद्योग मानक बन गया है। हालाँकि, अनुरोधों को संसाधित करने, डेटा सत्यापन और प्रतिक्रिया उत्पन्न करने के लिए मैन्युअल रूप से कोड लिखना एक समय लेने वाली और त्रुटि-प्रवण प्रक्रिया है। सौभाग्य से, C++ पारिस्थितिकी तंत्र OpenAPI स्पेसिफिकेशन से स्वचालित कोड जनरेशन के लिए कई परिपक्व समाधान प्रदान करता है। इस लेख में, हम मुख्य टूल्स, उनकी ताकत और व्यावहारिक उदाहरणों पर चर्चा करेंगे।
1. OpenAPI Generator (openapi-generator.tech)
C++ सहित दर्जनों भाषाओं के लिए सबसे लोकप्रिय सार्वभौमिक कोड जनरेटर। OpenAPI 3.0 और 3.1 का समर्थन करता है। यह सर्वर कोड (C++ REST SDK / cpprestsdk, Pistache, Restbed) और क्लाइंट कोड दोनों उत्पन्न करने की अनुमति देता है।
स्थापना
npm install @openapitools/openapi-generator-cli -g# या Docker के माध्यम से:docker run --rm -v ${PWD}:/local openapitools/openapi-generator-cli generate \ -i /local/petstore.yaml \ -g cpp-restsdk \ -o /local/out/cpp-clientcpprestsdk पर क्लाइंट जनरेशन का उदाहरण
मान लीजिए कि आपके पास पालतू जानवरों की दुकान के API के विवरण के साथ एक petstore.yaml फ़ाइल है। जनरेशन के बाद, आपको तैयार क्लासेस मिलेंगी:
#include "ApiClient.h"#include "PetApi.h"
int main() { auto client = std::make_shared<ApiClient>(); PetApi api(client);
api.getPetById(1).then([](std::shared_ptr<Pet> pet) { std::cout << "Pet name: " << pet->getName() << std::endl; }).wait(); return 0;}लाभ: विशाल समुदाय, कई फ्रेमवर्क के लिए समर्थन, सक्रिय विकास।
नुकसान: उत्पन्न कोड अनावश्यक हो सकता है, विशिष्ट फ्रेमवर्क के लिए मैन्युअल ट्यूनिंग की आवश्यकता होती है।
2. oat++ (oatpp.io)
OpenAPI 3.0 के अपने समर्थन के साथ C++ के लिए एक आधुनिक फ्रेमवर्क। OpenAPI Generator के विपरीत, oat++ स्पेसिफिकेशन से कोड उत्पन्न नहीं करता है, बल्कि पहले से लिखे गए एंडपॉइंट्स को एनोटेट करने और स्वचालित रूप से OpenAPI स्पेसिफिकेशन निर्यात करने की अनुमति देता है।
एंडपॉइंट एनोटेशन का उदाहरण
ENDPOINT("GET", "/pets/{petId}", getPetById) { auto dto = PetDto::createShared(); dto->id = request->getPathVariable("petId"); dto->name = "Rex"; dto->status = "available"; return createDtoResponse(Status::CODE_200, dto);}
// DTO का विवरणDTO(PetDto, FIELD(Int32, id, "id"), FIELD(String, name, "name"), FIELD(String, status, "status"));इसके बाद, oat++ रनटाइम में स्वचालित रूप से openapi.json उत्पन्न करेगा। स्थैतिक जनरेशन के लिए, oatpp-swagger उपयोगिता का उपयोग किया जाता है।
लाभ: मूल दृष्टिकोण, एकीकृत फ्रेमवर्क, उत्कृष्ट दस्तावेज़ीकरण, अंतर्निहित Swagger UI समर्थन।
नुकसान: पूरी तरह से oat++ के उपयोग की आवश्यकता है, अन्य फ्रेमवर्क पर पहले से मौजूद प्रोजेक्ट्स के लिए उपयुक्त नहीं है।
3. Drogon (drogon.org)
C++17/20 के लिए उच्च-प्रदर्शन एसिंक्रोनस वेब फ्रेमवर्क। इसमें प्रोजेक्ट स्केलेटन जनरेशन के लिए drogon_ctl मॉड्यूल और OpenAPI 3.0 दस्तावेज़ीकरण के स्वचालित जनरेशन के लिए drogon::OpenApiPlugin प्लगइन शामिल है।
OpenApiPlugin के उपयोग का उदाहरण
#include <drogon/drogon.h>using namespace drogon;
int main() { app().registerController(std::make_shared<PetController>()); app().addPlugin("drogon::OpenApiPlugin", { {"title", "Pet Store API"}, {"version", "1.0.0"} }); app().run();}स्वचालित दस्तावेज़ीकरण के साथ कंट्रोलर:
class PetController : public HttpController<PetController> {public: MET