GraphQL और Java का परिचय
\nGraphQL API के लिए एक आधुनिक क्वेरी भाषा है, जिसे Facebook द्वारा विकसित किया गया है। REST के विपरीत, जहां प्रत्येक एंडपॉइंट डेटा की एक निश्चित संरचना लौटाता है, GraphQL क्लाइंट को केवल उन्हीं फ़ील्ड को अनुरोध करने की अनुमति देता है जिनकी उसे आवश्यकता होती है। यह स्थानांतरित डेटा की मात्रा को कम करता है और जटिल इंटरफेस के विकास को सरल बनाता है।
\nइस ट्यूटोरियल में, हम Spring Boot और graphql-java लाइब्रेरी का उपयोग करके Java में एक सरल GraphQL API बनाएंगे। आप सीखेंगे कि प्रोजेक्ट कैसे सेट करें, स्कीमा को परिभाषित करें, रिज़ॉल्वर लागू करें और API का परीक्षण करें। यह लेख शुरुआती लोगों के लिए है, इसलिए हम चरण दर चरण आगे बढ़ेंगे।
काम करने के लिए आपको आवश्यकता होगी: JDK 11+, Maven या Gradle, IDE (IntelliJ IDEA, Eclipse) और Java का बुनियादी ज्ञान।
\n\n1. Spring Boot प्रोजेक्ट सेटअप
\nचलिए एक नया Spring Boot प्रोजेक्ट बनाकर शुरू करते हैं। सबसे आसान तरीका Spring Initializr का उपयोग करना है। निम्नलिखित डिपेंडेंसी चुनें:
\n- \n
- Spring Web \n
- Spring Boot DevTools \n
- Lombok (वैकल्पिक, कोड को सरल बनाने के लिए) \n
प्रोजेक्ट जनरेट होने के बाद, pom.xml (या build.gradle) में GraphQL के लिए डिपेंडेंसी जोड़ें:
<dependency>\n <groupId>com.graphql-java</groupId>\n <artifactId>graphql-spring-boot-starter</artifactId>\n <version>5.0.2</version>\n</dependency>\n<dependency>\n <groupId>com.graphql-java</groupId>\n <artifactId>graphql-java-tools</artifactId>\n <version>5.2.4</version>\n</dependency>\nये लाइब्रेरीज़ Spring Boot के साथ GraphQL एकीकरण को सरल बनाएंगी। डिपेंडेंसी अपडेट करने के बाद, प्रोजेक्ट को mvn spring-boot:run कमांड या IDE के माध्यम से चलाएं।
2. GraphQL स्कीमा को परिभाषित करना
\nस्कीमा GraphQL API का आधार है। यह डेटा प्रकारों, क्वेरी (queries) और म्यूटेशन (mutations) का वर्णन करता है। src/main/resources फ़ोल्डर में schema.graphqls फ़ाइल बनाएं:
type Book {\n id: ID!\n title: String!\n author: String!\n year: Int\n}\n\ntype Query {\n books: [Book]\n bookById(id: ID!): Book\n}\n\ntype Mutation {\n addBook(title: String!, author: String!, year: Int): Book\n}\nयहां हमने Book प्रकार को अनिवार्य फ़ील्ड id, title, author और वैकल्पिक year के साथ परिभाषित किया है। Query में दो क्वेरी हैं: सभी पुस्तकें प्राप्त करना और ID द्वारा पुस्तक प्राप्त करना। Mutation नई पुस्तकें जोड़ने की अनुमति देता है।
विस्मयादिबोधक चिह्न पर ध्यान दें - यह एक अनिवार्य फ़ील्ड (non-null) को दर्शाता है।
\n\n3. रिज़ॉल्वर को लागू करना
\nरिज़ॉल्वर (resolvers) Java क्लास हैं जो स्कीमा को डेटा से जोड़ते हैं। आइए डेटा मॉडल के रूप में Book क्लास बनाएं:
import lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\npublic class Book {\n private String id;\n private String title;\n private String author;\n private Integer year;\n}\nअब पुस्तकों को संग्रहीत करने के लिए एक सेवा बनाएं (वास्तविक प्रोजेक्ट में यहां डेटाबेस कनेक्शन होगा):
\nimport org.springframework.stereotype.Service;\nimport javax.annotation.PostConstruct;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Optional;\nimport java.util.UUID;\n\n@Service\npublic class BookService {\n private List<Book> books = new ArrayList<>();\n\n @PostConstruct\n public void init() {\n books.add(new Book("1", "युद्ध और शांति", "लियो टॉल्स्टॉय", 1869));\n books.add(new Book("2", "अपराध और दंड", "फ्योदोर दोस्तोयेव्स्की", 1866));\n }\n\n public List<Book> getAllBooks() {\n return books;\n }\n\n public Optional<Book> getBookById(String id) {\n return books.str