C++ के साथ GraphQL API: शुरुआती लोगों के लिए चरण-दर-चरण ट्यूटोरियल
\n\nGraphQL API के लिए एक आधुनिक क्वेरी भाषा है, जो क्लाइंट को केवल वही डेटा अनुरोध करने की अनुमति देती है जिसकी उन्हें वास्तव में आवश्यकता होती है। REST के विपरीत, जहाँ प्रतिक्रिया संरचना निश्चित होती है, GraphQL लचीलापन और नियंत्रण प्रदान करता है। इस ट्यूटोरियल में, हम शुरुआत से C++ पर एक सरल GraphQL API बनाने का तरीका समझेंगे। आप सीखेंगे कि graphql-cpp लाइब्रेरी को कैसे कनेक्ट करें, स्कीमा को परिभाषित करें, रिज़ॉल्वर लिखें और क्वेरी का परीक्षण करें। यह लेख शुरुआती लोगों के लिए है जो C++ की मूल बातों से परिचित हैं।
C++ क्यों? यह भाषा उच्च प्रदर्शन सुनिश्चित करती है, जो उच्च लोड वाले API के लिए महत्वपूर्ण है। C++ पर GraphQL का उपयोग अक्सर रीयल-टाइम सिस्टम, गेम इंजन और उच्च-लोड वाली वेब सेवाओं में किया जाता है। चलिए शुरू करते हैं!
\n\nपर्यावरण की स्थापना और कॉन्फ़िगरेशन
\n\nकाम करने के लिए हमें C++17 समर्थन वाला कंपाइलर (जैसे, GCC 8+ या Clang 10+), CMake और graphql-cpp लाइब्रेरी की आवश्यकता होगी। आइए सभी आवश्यक चीज़ें स्थापित करें।
चरण 1: निर्भरताएँ स्थापित करना
\nUbuntu/Debian में, निम्नलिखित चलाएँ:
\nsudo apt update\nsudo apt install build-essential cmake libboost-all-dev libssl-dev\n\n\nmacOS के लिए Homebrew का उपयोग करें:
\nbrew install cmake boost openssl\n\n\nचरण 2: graphql-cpp लाइब्रेरी को क्लोन करना
\ngraphql-cpp लाइब्रेरी C++ पर GraphQL का एक हल्का कार्यान्वयन है। रिपॉजिटरी को क्लोन करें:
git clone https://github.com/your-repo/graphql-cpp.git\ncd graphql-cpp\nmkdir build && cd build\ncmake .. -DCMAKE_BUILD_TYPE=Release\nmake -j4\nsudo make install\n\n\nस्थापना के बाद, एक नया प्रोजेक्ट बनाएँ। फ़ोल्डर संरचना:
\nmy_graphql_api/\n├── CMakeLists.txt\n├── src/\n│ ├── main.cpp\n│ └── schema.cpp\n└── include/\n └── schema.h\n\n\nचरण 3: CMakeLists.txt को कॉन्फ़िगर करना
\nCMakeLists.txt फ़ाइल बनाएँ:
cmake_minimum_required(VERSION 3.10)\nproject(GraphQLExample)\n\nset(CMAKE_CXX_STANDARD 17)\n\nfind_package(graphql-cpp REQUIRED)\nfind_package(Boost REQUIRED COMPONENTS system)\n\nadd_executable(graphql_example src/main.cpp src/schema.cpp)\ntarget_include_directories(graphql_example PRIVATE include)\ntarget_link_libraries(graphql_example graphql-cpp::graphql-cpp Boost::system)\n\n\nGraphQL स्कीमा को परिभाषित करना
\n\nस्कीमा GraphQL API का मूल है। यह डेटा प्रकारों, क्वेरी (queries) और म्यूटेशन (mutations) का वर्णन करता है। हमारे उदाहरण में, हम पुस्तकों की सूची प्रबंधित करने के लिए एक API बनाएँगे।
\n\nBook प्रकार बनाना
\ninclude/schema.h फ़ाइल में, डेटा संरचना और स्कीमा बनाने के लिए फ़ंक्शन घोषित करें:
#ifndef SCHEMA_H\n#define SCHEMA_H\n\n#include <graphql-cpp/graphql.hpp>\n#include <string>\n#include <vector>\n\nstruct Book {\n int id;\n std::string title;\n std::string author;\n int year;\n};\n\ngraphql::Schema createBookSchema();\n\n#endif // SCHEMA_H\n\n\nस्कीमा का कार्यान्वयन
\nsrc/schema.cpp फ़ाइल में, प्रकार और रूट क्वेरी को परिभाषित करें:
#include "schema.h"\n#include <graphql-cpp/graphql.hpp>\n#include <vector>\n#include <memory>\n\nusing namespace graphql;\n\n// पुस्तकों का अस्थायी भंडारण\nstd::vector<Book> books = {\n {1, "C++ Primer", "Stanley B. Lippman", 2012},\n {2, "Effective Modern C++", "Scott Meyers", 2014}\n};\n\nSchema createBookSchema() {\n // 1. Book प्रकार को परिभाषित करें\n ObjectType bookType("Book");\n bookType.addField("id", Type::NonNull(Type::Int()));\n bookType.addField("title", Type::NonNull(Type::String()));\n bookType.addField("author", Type::NonNull(Type::String()));\n bookType.addField("year", Type::Int());\n\n // 2. रूट क्वेरी को परिभाषित करें\n ObjectType queryType("Query");\n queryType.addField("books", Type::List(Type::NonNull(bookType)), \n [](const auto& args) -> json {\n json result =