GraphQL Java: आधुनिक API बनाने के लिए शक्तिशाली उपकरण
\n\nGraphQL Java — Java भाषा के लिए एक सर्वर-साइड लाइब्रेरी है, जो डेवलपर्स को GraphQL विनिर्देश के आधार पर लचीले, कुशल और टाइप-सुरक्षित API बनाने की अनुमति देती है। पारंपरिक REST API के विपरीत, GraphQL क्लाइंट को केवल उन डेटा का अनुरोध करने की क्षमता प्रदान करता है जिनकी उसे आवश्यकता होती है, जिससे स्थानांतरित की जाने वाली जानकारी की मात्रा काफी कम हो जाती है और एप्लिकेशन का प्रदर्शन तेज हो जाता है। यह लाइब्रेरी Java के लिए GraphQL का आधिकारिक कार्यान्वयन है और समुदाय द्वारा सक्रिय रूप से समर्थित है।
\n\nGraphQL Java की मुख्य विशेषताएं और लाभ
\n\n- \n
- टाइप-सुरक्षा: स्कीमा स्तर पर सभी डेटा की सख्त टाइपिंग रनटाइम पर त्रुटियों से बचाती है और विकास को सरल बनाती है। \n
- क्वेरी में लचीलापन: क्लाइंट केवल आवश्यक फ़ील्ड, नेस्टेड ऑब्जेक्ट का अनुरोध कर सकते हैं और एक ही क्वेरी में कई ऑपरेशन भी कर सकते हैं। \n
- एकल प्रवेश बिंदु: कई एंडपॉइंट वाले REST के विपरीत, GraphQL सभी क्वेरी के लिए एक ही endpoint का उपयोग करता है। \n
- स्वचालित दस्तावेज़ीकरण: स्कीमा के आधार पर इंटरैक्टिव दस्तावेज़ीकरण उत्पन्न होता है (उदाहरण के लिए, GraphiQL या Playground के माध्यम से)। \n
- सब्सक्रिप्शन के लिए समर्थन: WebSocket के माध्यम से रीयल-टाइम अपडेट प्राप्त करने की क्षमता। \n
- Java इकोसिस्टम के साथ एकीकरण: Spring Boot, Micronaut, Quarkus और अन्य फ्रेमवर्क के साथ आसानी से एकीकृत होता है। \n
GraphQL Java के साथ शुरुआत करना
\n\nअपने Maven प्रोजेक्ट में लाइब्रेरी जोड़ने के लिए, pom.xml फ़ाइल में निम्नलिखित निर्भरता जोड़ें:
<dependency>\n <groupId>com.graphql-java</groupId>\n <artifactId>graphql-java</artifactId>\n <version>21.3</version>\n</dependency>\n\nGradle के लिए, build.gradle में यह पंक्ति जोड़ें:
implementation 'com.graphql-java:graphql-java:21.3'\n\nGraphQL स्कीमा बनाना
\n\nस्कीमा किसी भी GraphQL API की नींव है। यह डेटा प्रकार, उपलब्ध क्वेरी (Query), म्यूटेशन (Mutation) और सब्सक्रिप्शन (Subscription) को परिभाषित करता है। पुस्तकों की लाइब्रेरी के लिए एक स्कीमा उदाहरण देखें:
\n\ntype Book {\n id: ID!\n title: String!\n author: String!\n year: Int\n}\n\ntype Query {\n bookById(id: ID!): Book\n allBooks: [Book]\n}\n\ntype Mutation {\n addBook(title: String!, author: String!, year: Int): Book\n}\n\nJava में स्कीमा लोड करने के लिए SchemaParser क्लास का उपयोग करें:
import graphql.schema.idl.SchemaParser;\nimport graphql.schema.idl.TypeDefinitionRegistry;\n\n// फ़ाइल से स्कीमा लोड करना\nFile schemaFile = new File("src/main/resources/schema.graphqls");\nTypeDefinitionRegistry typeRegistry = new SchemaParser().parse(schemaFile);\n\nResolver (DataFetcher) का कार्यान्वयन
\n\nResolver (या DataFetcher) वे क्लास हैं जो स्कीमा के प्रत्येक फ़ील्ड के लिए डेटा प्रदान करते हैं। bookById क्वेरी के लिए एक सरल resolver का उदाहरण:
\n\nimport graphql.schema.DataFetcher;\nimport graphql.schema.DataFetchingEnvironment;\n\npublic class BookDataFetcher implements DataFetcher<Book> {\n @Override\n public Book get(DataFetchingEnvironment environment) {\n String id = environment.getArgument("id");\n // डेटाबेस से पुस्तक प्राप्त करने का तर्क\n return bookRepository.findById(id);\n }\n}\n\nफिर resolver को स्कीमा फ़ील्ड से जोड़ें:
\n\nimport graphql.schema.idl.RuntimeWiring;\n\nRuntimeWiring wiring = RuntimeWiring.newRuntimeWiring()\n .type("Query", builder -> builder.dataFetcher("bookById", new BookDataFetcher()))\n .type("Mutation", builder -> builder.dataFetcher("addBook", new AddBookDataFetcher()))\n .build();\n\nक्वेरी निष्पादित करना
\n\nस्कीमा सेटअप करने के बाद