C++ पर API के साथ काम: REST, GraphQL, gRPC
\n\nजब API बनाने या उपभोग करने की बात आती है, तो कई डेवलपर आदतन Python, Node.js या Go की ओर रुख करते हैं। लेकिन क्या होगा यदि आपको अधिकतम प्रदर्शन, मेमोरी पर निम्न-स्तरीय नियंत्रण चाहिए या आप किसी लीगेसी सिस्टम में काम कर रहे हैं जहाँ C++ राजा है? उत्तर सरल है: C++ न केवल जीवित है - यह API की दुनिया में फल-फूल रहा है। आइए तीन प्रमुख दृष्टिकोणों को समझें जो प्रत्येक C++ डेवलपर को जानना चाहिए: क्लासिक REST, आधुनिक GraphQL और उच्च-प्रदर्शन वाला gRPC।
\n\nयह लेख कोई शुष्क संदर्भ नहीं है, बल्कि एक व्यावहारिक मार्गदर्शिका है, जो उन लोगों के लिए लिखी गई है जो वास्तविक कोड लिखना चाहते हैं। हम देखेंगे कि C++ पर ये तकनीकें कैसे लागू की जाती हैं, लोकप्रिय लाइब्रेरीज़ के साथ उदाहरण देंगे और आपके कार्य के लिए सही उपकरण चुनने में मदद करेंगे।
\n\n1. C++ पर REST API: आधुनिक रूप में क्लासिक
\n\nREST (Representational State Transfer) API की सबसे सामान्य शैली बनी हुई है। इसे सादगी, JSON की मानव-पठनीयता और सार्वभौमिकता के लिए पसंद किया जाता है। C++ पर हमारे पास REST के साथ काम करने के लिए कई शक्तिशाली उपकरण हैं, और सबसे लोकप्रिय में से एक Microsoft का cpprestsdk (उर्फ Casablanca) है।
\n\nC++ पर REST क्लाइंट लिखना
\n\nकल्पना करें कि हमें सार्वजनिक API से मौसम डेटा प्राप्त करना है। cpprestsdk के साथ यह इस प्रकार दिखता है:
\n\n#include <cpprest/http_client.h>\n#include <cpprest/filestream.h>\n#include <iostream>\n\nusing namespace web;\nusing namespace web::http;\nusing namespace web::http::client;\n\nint main() {\n // HTTP क्लाइंट बनाएं\n http_client client(U("https://api.openweathermap.org/data/2.5"));\n\n // पैरामीटर के साथ GET अनुरोध बनाएं\n uri_builder builder(U("/weather"));\n builder.append_query(U("q"), U("Moscow"));\n builder.append_query(U("appid"), U("YOUR_API_KEY"));\n builder.append_query(U("units"), U("metric"));\n\n // अनुरोध भेजें और प्रतिक्रिया प्राप्त करें\n client.request(methods::GET, builder.to_string())\n .then([](http_response response) {\n if (response.status_code() == status_codes::OK) {\n return response.extract_json();\n }\n throw std::runtime_error("Failed to fetch data");\n })\n .then([](json::value jsonData) {\n std::cout << "Temperature: " \n << jsonData[U("main")][U("temp")].as_double() \n << "°C" << std::endl;\n })\n .wait();\n\n return 0;\n}\n\nमुख्य बिंदु:
\n- \n
- अतुल्यकालिकता: cpprestsdk PPL (Parallel Patterns Library) और futures का उपयोग करता है, जो C++ के लिए आदर्श है। \n
- JSON के साथ काम: अंतर्निहित पार्सर json::value डेटा में हेरफेर करना आसान बनाता है। \n
- क्रॉस-प्लेटफ़ॉर्म: लाइब्रेरी Windows, Linux और macOS पर काम करती है। \n
REST कब चुनें?
\nC++ पर REST इसके लिए आदर्श है:
\n- \n
- सरल CRUD संचालन \n
- वेब सेवाओं (सोशल नेटवर्क, भुगतान प्रणाली) के साथ एकीकरण \n
- प्रोटोटाइपिंग और कम लोड वाले माइक्रोसर्विसेज \n
2. GraphQL: C++ पर क्वेरी की लचीलापन
\n\nGraphQL REST की मुख्य समस्या को हल करता है - overfetching (अनावश्यक डेटा प्राप्त करना) और underfetching (पूरी जानकारी प्राप्त करने के लिए कई अनुरोधों की आवश्यकता)। C++ पर GraphQL के साथ काम करने के लिए अक्सर cppgraphql लाइब्रेरी का उपयोग किया जाता है या libcurl के आधार पर अपना स्वयं का क्लाइंट लिखा जाता है।
\n\nC++ पर GraphQL क्वेरी का उदाहरण
\n\nमान लीजिए, हमें उपयोगकर्ता प्रोफ़ाइल और उसके नवीनतम पोस्ट प्राप्त करने हैं - REST में इसके लिए दो अनुरोधों की आवश्यकता होगी, जबकि GraphQL में एक:
\n\n#include <iostream>\n#include <curl/curl.h>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nstatic size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) {\n ((std::string*)userp)->a