Spring Boot के साथ GraphQL APIs · पाठ

डेटा रिज़ॉल्वर लागू करना

विभिन्न स्रोतों से परिभाषित GraphQL फ़ील्ड के लिए डेटा प्राप्त करने हेतु Spring Boot में रिज़ॉल्वर फ़ंक्शन लिखें।

पाठ 2, कुल 4 में से11 चरण

डेटा रिज़ॉल्वर लागू करना, CoddyKit पर Spring Boot के साथ GraphQL APIs का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Spring Boot के साथ GraphQL APIs सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Spring Boot के साथ GraphQL APIs पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

डेटा रिज़ॉल्वर क्या होते हैं?

स्वागत है! GraphQL में क्लाइंट विशिष्ट डेटा माँगते हैं। लेकिन आपका सर्वर यह कैसे जानता है कि वह डेटा कहाँ से प्राप्त करना है?

यहीं डेटा रिज़ॉल्वर काम आते हैं! रिज़ॉल्वर एक फ़ंक्शन या विधि है जो आपके GraphQL स्कीमा के किसी विशिष्ट फ़ील्ड का डेटा प्राप्त करना जानती है।

  • वे आपके स्कीमा और डेटा स्रोतों, जैसे डेटाबेस, एपीआई या साधारण मेमोरी में मौजूद सूचियों, के बीच पुल का काम करते हैं।
  • आपके स्कीमा के प्रत्येक फ़ील्ड के लिए प्रत्यक्ष या अप्रत्यक्ष रूप से एक रिज़ॉल्वर आवश्यक होता है।

GraphQL के लिए Spring में रिज़ॉल्वर

Spring for GraphQL रिज़ॉल्वर लागू करना आसान बनाता है। यह Java विधियों को आपके GraphQL स्कीमा के फ़ील्ड से सीधे मैप करने के लिए एनोटेशन का उपयोग करता है।

आमतौर पर आप ये रिज़ॉल्वर विधियाँ Spring की @Controller क्लास के भीतर लिखेंगे। Spring इन नियंत्रकों को अपने-आप स्कैन करता है और नामकरण परंपराओं या स्पष्ट एनोटेशन के आधार पर उनकी विधियों को GraphQL स्कीमा के फ़ील्ड से जोड़ता है।

आपका पहला मूल क्वेरी रिज़ॉल्वर

आइए किसी मूल क्वेरी के लिए एक सरल रिज़ॉल्वर बनाएँ। हम एक बुनियादी hello फ़ील्ड परिभाषित करेंगे, जो अभिवादन वाली स्ट्रिंग लौटाएगा।

पहले मान लीजिए कि हमारे स्कीमा में यह है:

type Query {
  hello: String
}

अब Java रिज़ॉल्वर लिखते हैं:

import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;

@Controller
public class GreetingController {

  @QueryMapping
  public String hello() {
    return "Hello from CoddyKit!";
  }
}

कस्टम ऑब्जेक्ट का रिज़ॉल्यूशन

Resolver केवल सरल स्ट्रिंग के लिए नहीं होते। वे कस्टम Java ऑब्जेक्ट भी लौटा सकते हैं! आइए एक सरल Book क्लास और उसे लौटाने वाला resolver परिभाषित करें।

मान लीजिए, हमारे स्कीमा में यह है:

type Book {
  id: ID
  title: String
  author: String
}

type Query {
  firstBook: Book
}

यहाँ Book क्लास और एक resolver दिया गया है:

import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;

// A simple data class for our Book
record Book(String id, String title, String author) {}

@Controller
public class BookController {

  @QueryMapping
  public Book firstBook() {
    return new Book("book-1", "The Great Journey", "Alice Wonderland");
  }
}

डेटा स्रोतों का अनुकरण

हमारे उदाहरणों के लिए, हम किसी वास्तविक डेटाबेस से कनेक्ट नहीं करेंगे। इसके बजाय, डेटा स्रोत का अनुकरण करने के लिए हम मेमोरी में मौजूद सूची का उपयोग करेंगे। इससे हमारा कोड सरल और resolvers पर केंद्रित रहेगा।

किसी वास्तविक ऐप्लिकेशन में, आपके resolvers इनसे इंटरैक्ट कर सकते हैं:

  • डेटाबेस (SQL, NoSQL)
  • अन्य REST या GraphQL API
  • संदेश कतारें
  • फ़ाइल सिस्टम

स्रोत चाहे जो भी हो, resolver का काम केवल डेटा प्राप्त करना है!

सूची resolver लागू करना

अक्सर, आप ऑब्जेक्ट की सूची लौटाना चाहेंगे। हमारे BookController को मॉक स्रोत से पुस्तकों की सूची उपलब्ध कराने के लिए अपडेट किया जा सकता है।

यदि हमारे स्कीमा में यह है:

type Query {
  allBooks: [Book]
}

तो resolver को इस तरह लागू किया जाएगा:

import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;
import java.util.List;
import java.util.ArrayList;

record Book(String id, String title, String author) {}

@Controller
public class BookListController {

  private final List<Book> books = new ArrayList<>(List.of(
    new Book("b-1", "The Moonstone", "Wilkie Collins"),
    new Book("b-2", "Pride and Prejudice", "Jane Austen"),
    new Book("b-3", "1984", "George Orwell")
  ));

  @QueryMapping
  public List<Book> allBooks() {
    return books;
  }
}

आर्ग्युमेंट के साथ ID द्वारा समाधान

क्वेरी में अक्सर आर्ग्युमेंट की आवश्यकता होती है, जैसे किसी पुस्तक को उसकी ID से खोजना। Resolvers इन आर्ग्युमेंट को आसानी से स्वीकार कर सकते हैं।

यदि हमारे स्कीमा में यह है:

type Query {
  bookById(id: ID!): Book
}

हम Spring for GraphQL में @Argument एनोटेशन का उपयोग करते हैं:

import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;
import java.util.List;
import java.util.ArrayList;

record Book(String id, String title, String author) {}

@Controller
public class BookByIdController {

  private final List<Book> books = new ArrayList<>(List.of(
    new Book("b-1", "The Moonstone", "Wilkie Collins"),
    new Book("b-2", "Pride and Prejudice", "Jane Austen")
  ));

  @QueryMapping
  public Book bookById(@Argument String id) {
    return books.stream()
      .filter(book -> book.id().equals(id))
      .findFirst()
      .orElse(null);
  }
}

फ़ील्ड-स्तरीय resolvers

कभी-कभी किसी ऑब्जेक्ट के फ़ील्ड को स्वयं एक अलग resolver की आवश्यकता होती है। उदाहरण के लिए, यदि Book का author एक जटिल ऑब्जेक्ट हो, जिसे अपने स्तर पर खोजने की आवश्यकता हो।

मान लीजिए कि Book में एक authorId है और हमें पूरा Author ऑब्जेक्ट प्राप्त करना है। ऐसे गैर-रूट फ़ील्ड के लिए हम @SchemaMapping का उपयोग करते हैं।

import org.springframework.graphql.data.method.annotation.SchemaMapping;
import org.springframework.stereotype.Controller;

record Book(String id, String title, String authorId) {}
record Author(String id, String name) {}

@Controller
public class AuthorResolver {

  // This resolver is for the 'author' field on a 'Book' object
  @SchemaMapping
  public Author author(Book book) {
    // In a real app, you'd fetch from a data source using book.authorId()
    if ("auth-1".equals(book.authorId())) {
      return new Author(book.authorId(), "Wilkie Collins");
    }
    return new Author(book.authorId(), "Unknown Author");
  }
}

पूर्ण resolver ऐप्लिकेशन

आइए सब कुछ एक साथ जोड़कर चलने योग्य Spring Boot ऐप्लिकेशन बनाते हैं! इस उदाहरण में पुस्तकों की सूची बनाने, किसी पुस्तक को ID से खोजने और किसी पुस्तक के लेखक का समाधान करने वाले resolvers शामिल हैं।

इसे चलाकर GraphQL क्लाइंट से इसकी क्वेरी करने का प्रयास करें!

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.graphql.data.method.annotation.SchemaMapping;
import org.springframework.stereotype.Controller;
import java.util.List;
import java.util.ArrayList;

// Data classes
record Book(String id, String title, String authorId) {}
record Author(String id, String name) {}

@SpringBootApplication
public class GraphQLResolversApp {
  public static void main(String[] args) {
    SpringApplication.run(GraphQLResolversApp.class, args);
  }
}

@Controller
class BookDataController {

  private final List<Book> books = new ArrayList<>(List.of(
    new Book("b-1", "The Moonstone", "auth-1"),
    new Book("b-2", "Pride and Prejudice", "auth-2"),
    new Book("b-3", "1984", "auth-3")
  ));

  @QueryMapping
  public List<Book> allBooks() {
    return books;
  }

  @QueryMapping
  public Book bookById(@Argument String id) {
    return books.stream()
      .filter(book -> book.id().equals(id))
      .findFirst()
      .orElse(null);
  }

  // Field-level resolver for 'author' on 'Book'
  @SchemaMapping
  public Author author(Book book) {
    // Mocking author data lookup
    return switch (book.authorId()) {
      case "auth-1" -> new Author("auth-1", "Wilkie Collins");
      case "auth-2" -> new Author("auth-2", "Jane Austen");
      case "auth-3" -> new Author("auth-3", "George Orwell");
      default -> new Author(book.authorId(), "Unknown Author");
    };
  }
}

Resolver मैपिंग को समझना

Spring Boot में GraphQL resolvers के बारे में निम्नलिखित में से कौन-से कथन TRUE हैं?

पुनरावलोकन: resolver की आपकी यात्रा

GraphQL API बनाने की दिशा में आपने एक बड़ा कदम उठाया है!

  • हमने सीखा कि resolvers डेटा प्राप्त करने के लिए मुख्य तर्क होते हैं।
  • Spring for GraphQL रूट क्वेरी के लिए @Controller के साथ @QueryMapping और नेस्टेड फ़ील्ड के लिए @SchemaMapping का उपयोग करता है।
  • Resolvers सरल प्रकार, कस्टम ऑब्जेक्ट और सूचियाँ लौटा सकते हैं।
  • आप @Argument एनोटेशन का उपयोग करके resolvers को आर्ग्युमेंट दे सकते हैं।

अब आप GraphiQL जैसे टूल का उपयोग करके इन क्वेरी को चलाना सीखेंगे!

शुरुआत निःशुल्क

एआई शिक्षक के साथ Spring Boot के साथ GraphQL APIs सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “डेटा रिज़ॉल्वर लागू करना” पाठ निःशुल्क है?

हाँ—“डेटा रिज़ॉल्वर लागू करना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Spring Boot के साथ GraphQL APIs पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Spring Boot के साथ GraphQL APIs पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“डेटा रिज़ॉल्वर लागू करना” में मैं क्या सीखूँगा?

विभिन्न स्रोतों से परिभाषित GraphQL फ़ील्ड के लिए डेटा प्राप्त करने हेतु Spring Boot में रिज़ॉल्वर फ़ंक्शन लिखें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Spring Boot के साथ GraphQL APIs का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Spring Boot के साथ GraphQL APIs शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Spring Boot के साथ GraphQL APIs शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“डेटा रिज़ॉल्वर लागू करना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Spring Boot के साथ GraphQL APIs पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Spring Boot के साथ GraphQL APIs पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. कस्टम डेटा प्रकार परिभाषित करना
  2. डेटा रिज़ॉल्वर लागू करना
  3. सरल GraphQL क्वेरी चलाना
  4. GraphQL म्यूटेशन: डेटा बदलना
← Spring Boot के साथ GraphQL APIs पर वापस जाएँ