परिचय: GraphQL और C++ — आधुनिक API के लिए शक्तिशाली जोड़ी
\n\nGraphQL लचीले और कुशल API बनाने के लिए डी-फैक्टो मानक बन रहा है। जबकि अधिकांश ट्यूटोरियल JavaScript या Python पर केंद्रित होते हैं, C++ उच्च-लोड सिस्टम, गेम सर्वर और एम्बेडेड समाधानों के लिए अपरिहार्य बना हुआ है। इस चरण-दर-चरण मार्गदर्शिका में, हम graphql-cpp लाइब्रेरी और cpp-httplib सर्वर का उपयोग करके C++ में एक पूर्ण GraphQL API को शुरू से बनाएंगे।
आप सीखेंगे कि वातावरण कैसे सेट करें, स्कीमा कैसे परिभाषित करें, रिज़ॉल्वर कैसे लागू करें और सर्वर कैसे चलाएं। सभी कोड उदाहरणों को सीधे वास्तविक परियोजनाओं में लागू किया जा सकता है।
\n\n1. वातावरण तैयार करना और निर्भरताएँ स्थापित करना
\n\nकाम करने के लिए हमें आवश्यकता होगी:
\n- \n
- C++17 समर्थन वाला कंपाइलर (GCC 8+, Clang 7+, MSVC 2019+) \n
- CMake (संस्करण 3.14+) \n
graphql-cppलाइब्रेरी (GraphQL कार्यान्वयन) \ncpp-httplibलाइब्रेरी (HTTP सर्वर) \n- vcpkg पैकेज मैनेजर (वैकल्पिक, लेकिन सुविधाजनक) \n
vcpkg के माध्यम से स्थापना
\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh\n./vcpkg install graphql-cpp cpp-httplib nlohmann-json\n\nप्रोजेक्ट संरचना
\ngraphql-cpp-api/\n├── CMakeLists.txt\n├── src/\n│ ├── main.cpp\n│ ├── schema.cpp\n│ ├── schema.h\n│ ├── resolvers.cpp\n│ └── resolvers.h\n└── vcpkg.json\n\nCMakeLists.txt
\ncmake_minimum_required(VERSION 3.14)\nproject(GraphQLCppApi)\n\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\nfind_package(graphql-cpp CONFIG REQUIRED)\nfind_package(cpp-httplib CONFIG REQUIRED)\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(graphql_server\n src/main.cpp\n src/schema.cpp\n src/resolvers.cpp\n)\n\ntarget_link_libraries(graphql_server\n graphql-cpp::graphql-cpp\n cpp-httplib::cpp-httplib\n nlohmann_json::nlohmann_json\n)\n\nअब कोड लिखने के लिए सब कुछ तैयार है।
\n\n2. GraphQL स्कीमा और प्रकार परिभाषित करना
\n\nहम पुस्तक प्रबंधन के लिए एक सरल API की स्कीमा बनाकर शुरू करेंगे। हमारे पास Book और Author प्रकार होंगे, साथ ही क्वेरी और म्यूटेशन भी होंगे।
schema.h
\n#ifndef SCHEMA_H\n#define SCHEMA_H\n\n#include <graphqlcpp/GraphQLSchema.h>\n\nstd::shared_ptr<graphql::GraphQLSchema> createSchema();\n\n#endif\n\nschema.cpp
\n#include "schema.h"\n#include "resolvers.h"\n\nstd::shared_ptr<graphql::GraphQLSchema> createSchema() {\n using namespace graphql;\n\n // Author प्रकार\n auto authorType = object_type("Author", {\n field("id", int_type()),\n field("name", string_type()),\n field("books", list_type(int_type()))\n });\n\n // Book प्रकार\n auto bookType = object_type("Book", {\n field("id", int_type()),\n field("title", string_type()),\n field("authorId", int_type()),\n field("year", int_type()),\n field("genre", string_type())\n });\n\n // Query रूट\n auto queryType = object_type("Query", {\n field("books", list_type(bookType), {\n argument("genre", string_type(), true) // वैकल्पिक तर्क\n }, resolveBooks),\n field("book", bookType, {\n argument("id", int_type(), false) // अनिवार्य तर्क\n }, resolveBookById),\n field("authors", list_type(authorType), resolveAuthors)\n });\n\n // Mutation रूट\n auto mutationType = object_type("Mutation", {\n field("addBook", bookType, {\n argument("title", string_type(), false),\n argument("authorId", int_type(), false),\n argument("year", int_type(), false),\n argument("genre", string_type(), false)\n }, resolveAddBook),\n field("deleteBook", bool_type(), {\n argument("id", int_type(), false)\n }, res