C++ के लिए GraphQL लाइब्रेरी: graphql-cpp
आधुनिक वेब प्रौद्योगिकियों की दुनिया में, GraphQL लचीले और कुशल API बनाने के लिए एक मानक बन गया है। यदि आप C++ में विकास कर रहे हैं और इस प्रोटोकॉल के लिए समर्थन लागू करना चाहते हैं, तो आपको एक विश्वसनीय लाइब्रेरी की आवश्यकता होगी। सबसे अच्छे समाधानों में से एक graphql-cpp है — एक ओपन-सोर्स लाइब्रेरी जो आपको न्यूनतम प्रयास के साथ C++ में पूर्ण GraphQL सर्वर बनाने की अनुमति देती है।
graphql-cpp क्या है?
graphql-cpp एक हल्की लेकिन शक्तिशाली लाइब्रेरी है जो C++14 और उससे ऊपर पर GraphQL विनिर्देश (जून 2018) को लागू करती है। यह सभी आवश्यक घटक प्रदान करती है: क्वेरी पार्सर, टाइप सिस्टम, क्वेरी निष्पादन तंत्र और सब्सक्रिप्शन के लिए समर्थन। लाइब्रेरी तीसरे पक्ष के HTTP फ्रेमवर्क पर निर्भर नहीं है, जिससे इसे एम्बेडेड सिस्टम से लेकर उच्च-लोड सर्वर तक किसी भी प्रोजेक्ट में एकीकृत किया जा सकता है।
मुख्य विशेषताएं
- GraphQL स्कीमा का पूर्ण समर्थन: ऑब्जेक्ट, इंटरफ़ेस, यूनियन-प्रकार, एनम, स्केलर और इनपुट-प्रकार।
- क्वेरी सत्यापन और निष्पादन: जटिल क्वेरी, खंड और निर्देशों के समर्थन के साथ अंतर्निहित सत्यापनकर्ता और निष्पादक।
- सब्सक्रिप्शन के लिए समर्थन: रिएक्टिव स्ट्रीम के माध्यम से कार्यान्वयन।
- अनुकूलन योग्य रिज़ॉल्वर: स्कीमा फ़ील्ड से व्यावसायिक तर्क को जोड़ने के लिए लचीली प्रणाली।
- C++17/20 के साथ संगतता: अधिकतम प्रदर्शन के लिए भाषा की आधुनिक क्षमताओं का उपयोग।
- कोई निर्भरता नहीं: Boost, POCO या अन्य बाहरी लाइब्रेरी की आवश्यकता नहीं है।
स्थापना और कनेक्शन
लाइब्रेरी header-only (हेडर फ़ाइलें) के रूप में वितरित की जाती है। स्थापित करने के लिए, रिपॉजिटरी को क्लोन करें:
git clone https://github.com/your-repo/graphql-cpp.gitcd graphql-cppmkdir build && cd buildcmake ..makesudo make installआपके प्रोजेक्ट में, बस एक हेडर फ़ाइल शामिल करें:
#include <graphqlcpp/GraphQL.h>उदाहरण: एक सरल API बनाना
उपयोगकर्ताओं के बारे में जानकारी प्राप्त करने के लिए एक स्कीमा बनाने पर विचार करें।
1. स्कीमा परिभाषा
using namespace graphqlcpp;
auto schema = Schema::create(R"( type Query { user(id: ID!): User users: [User] } type User { id: ID! name: String! email: String })");2. रिज़ॉल्वर का कार्यान्वयन
// डेटा स्टोरेज का उदाहरणstd::map<std::string, User> users = { {"1", {"1", "Alice", "alice@example.com"}}, {"2", {"2", "Bob", "bob@example.com"}}};
// user फ़ील्ड के लिए रिज़ॉल्वरschema->addResolver("Query", "user", [](const ResolverArgs& args) { auto id = args.getArgument<std::string>("id"); if (users.count(id)) return users[id]; return nullptr; // यदि उपयोगकर्ता नहीं मिला तो null});
// users फ़ील्ड के लिए रिज़ॉल्वरschema->addResolver("Query", "users", [](const ResolverArgs&) { std::vector<User> result; for (const auto& [_, user] : users) { result.push_back(user); } return result;});3. क्वेरी प्रसंस्करण
std::string query = R"( { user(id: "1") { name email } })";
auto result = schema->execute(query);std::cout << result.dump(2) << std::endl;आउटपुट:
{ "data": { "user": { "name": "Alice", "email": "alice@example.com" } }}शैक्षिक वेबसाइट के लिए लाभ
- स्पष्ट दस्तावेज़ीकरण: लाइब्रेरी में कोड में विस्तृत टिप्पणियाँ और प्रत्येक प्रकार के लिए उदाहरण हैं।
- कम प्रवेश सीमा: शुरू करने के लिए, C++ की मूल बातें और बुनियादी अवधारणाओं को जानना पर्याप्त है।