GraphQL API का परिचय Java के साथ
GraphQL एक API के लिए क्वेरी भाषा है जो क्लाइंट को केवल वही डेटा माँगने की अनुमति देती है जिसकी उन्हें वास्तव में आवश्यकता है। REST के विपरीत, जहाँ प्रत्येक endpoint एक निश्चित डेटा संरचना लौटाता है, GraphQL लचीलापन प्रदान करता है और क्वेरी की संख्या को कम करता है। इस ट्यूटोरियल में हम Spring Boot और graphql-java लाइब्रेरी का उपयोग करके Java में एक पूर्ण GraphQL API बनाएंगे। आप सीखेंगे कि प्रोजेक्ट कैसे सेट करें, स्कीमा कैसे परिभाषित करें, resolvers कैसे लिखें और क्वेरी और म्यूटेशन को कैसे संभालें। सभी कोड उदाहरण चलाने के लिए तैयार हैं।
1. प्रोजेक्ट सेटअप और डिपेंडेंसी
शुरू करने के लिए, हम एक नया Spring Boot प्रोजेक्ट बनाएंगे। हम Maven का उपयोग करेंगे, लेकिन आप उदाहरण को Gradle के अनुसार अनुकूलित कर सकते हैं। pom.xml में निम्नलिखित डिपेंडेंसी जोड़ें:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
<version>21.0</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-spring-boot-starter-webmvc</artifactId>
<version>2021-06-28T00-00-00-6e3b7b2</version>
</dependency>
डिपेंडेंसी जोड़ने के बाद, मुख्य एप्लिकेशन क्लास बनाएं:
@SpringBootApplication
public class GraphqlApplication {
public static void main(String[] args) {
SpringApplication.run(GraphqlApplication.class, args);
}
}
अब GraphQL एंट्री पॉइंट कॉन्फ़िगर करें। resources फ़ोल्डर में application.yml फ़ाइल बनाएं:
graphql:
servlet:
mapping: /graphql
enabled: true
cors-enabled: true
हो गया! प्रोजेक्ट की बुनियादी संरचना चलने के लिए तैयार है। आगे हम स्कीमा को परिभाषित करने की ओर बढ़ते हैं।
2. GraphQL स्कीमा की परिभाषा
स्कीमा GraphQL API का मूल है। यह डेटा प्रकारों, क्वेरी और म्यूटेशन का वर्णन करता है। src/main/resources फ़ोल्डर में schema.graphqls फ़ाइल बनाएं:
type Book {
id: ID!
title: String!
author: String!
year: Int
}
type Query {
books: [Book]
bookById(id: ID!): Book
}
type Mutation {
addBook(title: String!, author: String!, year: Int): Book
deleteBook(id: ID!): Boolean
}
यहाँ हमने परिभाषित किया है:
- Book — id, title, author और year फ़ील्ड वाला एक ऑब्जेक्ट।
- Query — डेटा पढ़ने के लिए एंट्री पॉइंट (पुस्तकों की सूची और ID द्वारा खोज)।
- Mutation — डेटा बदलने के संचालन (पुस्तक जोड़ना और हटाना)।
अब हमें इस स्कीमा को एप्लिकेशन में लोड करना होगा। एक कॉन्फ़िगरेशन क्लास बनाएं:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import graphql.GraphQL;
import graphql.schema.GraphQLSchema;
import graphql.schema.idl.RuntimeWiring;
import graphql.schema.idl.SchemaGenerator;
import graphql.schema.idl.SchemaParser;
import graphql.schema.idl.TypeDefinitionRegistry;
import java.io.File;
import java.io.IOException;
@Configuration
public class GraphqlConfig {
@Bean
public GraphQL graphQL() throws IOException {
File schemaFile = new File("src/main/resources/schema.graphqls");
TypeDefinitionRegistry typeRegistry = new SchemaParser().parse(schemaFile);
RuntimeWiring wiring = buildWiring();
GraphQLSchema schema = new SchemaGenerator().makeExecutableSchema(typeRegistry, wiring);
return GraphQL.newGraphQL(schema).build();
}
private RuntimeWiring buildWiring() {
return RuntimeWiring.newRuntimeWiring()
.type(```