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

म्यूटेशन के लिए इनपुट प्रकारों का उपयोग

अधिक स्वच्छ और व्यवस्थित एपीआई कॉल के लिए पुनः उपयोग योग्य इनपुट प्रकार परिभाषित करके म्यूटेशन तर्कों को सरल बनाएँ।

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

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

म्यूटेशन आर्ग्युमेंट बहुत लंबे हैं?

GraphQL म्यूटेशन बनाते समय किसी इकाई को बनाने या अपडेट करने के लिए अक्सर आपको डेटा के कई अंश भेजने पड़ते हैं। नया उपयोगकर्ता या उत्पाद बनाने के बारे में सोचें।

प्रत्येक फ़ील्ड को अलग आर्ग्युमेंट के रूप में भेजने से आपके म्यूटेशन सिग्नेचर बहुत लंबे और संभालने में कठिन हो सकते हैं। इससे कोड कम पठनीय और कम रखरखाव योग्य हो जाता है।

GraphQL इनपुट प्रकारों से परिचय

इनपुट प्रकार GraphQL में विशेष ऑब्जेक्ट प्रकार होते हैं, जिनका उपयोग विशेष रूप से म्यूटेशन (और कभी-कभी क्वेरी) के आर्ग्युमेंट के रूप में किया जाता है। इनके माध्यम से आप संबंधित फ़ील्ड को एकल, संरचित ऑब्जेक्ट में समूहित कर सकते हैं।

इससे आपके म्यूटेशन की परिभाषाएँ अधिक साफ़ और व्यवस्थित बनती हैं। यह पारंपरिक REST API में DTO (Data Transfer Object) के काम करने के तरीके जैसा है।

इनपुट प्रकार का सिंटैक्स (SDL)

GraphQL Schema Definition Language (SDL) में इनपुट प्रकार परिभाषित करना सरल है। आप type के बजाय input कीवर्ड का उपयोग करते हैं।

इनपुट प्रकारों में फ़ील्ड के रूप में केवल स्केलर प्रकार, एनम या अन्य इनपुट प्रकार शामिल किए जा सकते हैं। इनमें आउटपुट ऑब्जेक्ट प्रकार, इंटरफ़ेस या यूनियन प्रकार शामिल नहीं किए जा सकते।

input CreateProductInput {
  name: String!
  description: String
  price: Float!
  category: String
}

समस्या: बहुत सारे आर्ग्युमेंट

नया उत्पाद बनाने वाले म्यूटेशन पर विचार करें। इनपुट प्रकार के बिना, आप इसे इस तरह परिभाषित कर सकते हैं:

ध्यान दें कि आर्ग्युमेंट की सूची कितनी लंबी और दोहरावपूर्ण हो सकती है, खासकर तब जब आपके पास कई फ़ील्ड हों। इसे लिखना और पढ़ना कठिन हो सकता है।

type Mutation {
  createProduct(
    name: String!,
    description: String,
    price: Float!,
    category: String
  ): Product
}

समाधान: साफ़-सुथरे म्यूटेशन

हमारे CreateProductInput का उपयोग करने पर म्यूटेशन सिग्नेचर बहुत साफ़ और पढ़ने में आसान हो जाता है। अब सभी संबंधित इनपुट फ़ील्ड एकल आर्ग्युमेंट के भीतर समाहित हैं।

इससे स्पष्टता बढ़ती है और आपकी स्कीमा में अनावश्यक जटिलता कम होती है।

type Mutation {
  createProduct(input: CreateProductInput!): Product
}

input CreateProductInput {
  name: String!
  description: String
  price: Float!
  category: String
}

इनपुट के लिए Spring Boot DTO

अपने Spring Boot एप्लिकेशन में आप GraphQL इनपुट प्रकारों को सरल Java वर्गों के रूप में प्रस्तुत करेंगे। ये Data Transfer Object (DTO) की तरह काम करते हैं, जिन्हें Spring का GraphQL एकीकरण आपके लिए स्वतः मैप कर सकता है।

सुगम मैपिंग के लिए सुनिश्चित करें कि आपके Java वर्ग में फ़ील्ड के नाम SDL इनपुट प्रकार के नामों से मेल खाते हों।

package com.coddykit.graphql;

public class CreateProductInput {
    private String name;
    private String description;
    private float price;
    private String category;

    // Getters and Setters (omitted for brevity)
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    // ... other getters/setters
}

रिज़ॉल्वर में इनपुट का उपयोग

अब देखते हैं कि Spring Boot में आपका GraphQL रिज़ॉल्वर मेथड इस CreateProductInput DTO का उपयोग कैसे करेगा। कई @Argument एनोटेशन के बजाय आपके पास अपने इनपुट ऑब्जेक्ट के लिए केवल एक एनोटेशन होगा।

इससे रिज़ॉल्वर मेथड सिग्नेचर बहुत साफ़ और संभालने में आसान हो जाता है, खासकर तब जब इनपुट फ़ील्ड बहुत अधिक हों।

package com.coddykit.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.MutationMapping;
import org.springframework.stereotype.Controller;

// Dummy Product class for example return type
class Product {
    String id; String name; public Product(String id, String name) { this.id = id; this.name = name; } 
    public String getId() { return id; } public String getName() { return name; }
}

// Input DTO from previous scene
class CreateProductInput {
    private String name; private String description; private float price; private String category;
    public String getName() { return name; } public void setName(String name) { this.name = name; }
    public String getDescription() { return description; } public void setDescription(String description) { this.description = description; }
    public float getPrice() { return price; } public void setPrice(float price) { this.price = price; }
    public String getCategory() { return category; } public void setCategory(String category) { this.category = category; }
}

@SpringBootApplication
@Controller
public class Main {

    public static void main(String[] args) {
        // This would start a Spring Boot web server
        // SpringApplication.run(Main.class, args);
        System.out.println("Application context started (conceptually).");
    }

    private static long productIdCounter = 1;

    @MutationMapping
    public Product createProduct(@Argument CreateProductInput input) {
        System.out.println("Creating product: " + input.getName());
        // In a real application, you'd save this to a database
        String newId = "prod-" + productIdCounter++;
        return new Product(newId, input.getName());
    }
}

इनपुट प्रकारों का उपयोग क्यों करें?

इनपुट प्रकार आपके GraphQL API डिज़ाइन के लिए कई महत्वपूर्ण लाभ प्रदान करते हैं:

  • पठनीयता: म्यूटेशन सिग्नेचर बहुत छोटे और स्पष्ट हो जाते हैं।
  • पुन: उपयोग: एक ही इनपुट प्रकार का उपयोग अक्सर बनाने और अपडेट करने वाले दोनों म्यूटेशन के लिए किया जा सकता है, जिससे स्कीमा में दोहराव कम होता है।
  • सत्यापन: एकल, समेकित इनपुट ऑब्जेक्ट पर सत्यापन तर्क लागू करना आसान होता है।
  • विस्तार-क्षमता: इनपुट प्रकार में नए वैकल्पिक फ़ील्ड जोड़ने से मौजूदा क्लाइंट प्रभावित नहीं होते, क्योंकि वे नए फ़ील्ड को अनदेखा कर सकते हैं।

नेस्टेड इनपुट के साथ जटिल डेटा

इनपुट प्रकारों में अन्य इनपुट प्रकार भी शामिल हो सकते हैं। इससे आप अपने म्यूटेशन के लिए जटिल, पदानुक्रमित डेटा का मॉडल बना सकते हैं। संरचित डेटा सबमिट करने के लिए यह बहुत शक्तिशाली सुविधा है।

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

input AddressInput {
  street: String!
  city: String!
  zipCode: String
}

input CustomerInput {
  name: String!
  email: String!
  shippingAddress: AddressInput
}

input CreateOrderInput {
  customer: CustomerInput!
  items: [OrderItemInput!]!
}

input OrderItemInput {
  productId: ID!
  quantity: Int!
}

इनपुट प्रकार जाँच

आपने GraphQL इनपुट प्रकारों और उनके लाभों के बारे में सीखा। आइए अपनी समझ की जाँच करें!

पुनरावलोकन: इनपुट प्रकारों में महारत

बहुत बढ़िया! इस पाठ में आपने GraphQL इनपुट प्रकारों में महारत हासिल की। आपने सीखा कि ये म्यूटेशन आर्ग्युमेंट को सुव्यवस्थित करके आपके API को अधिक साफ़ और रखरखाव योग्य बनाते हैं।

  • हमने देखा कि input कीवर्ड का उपयोग करके SDL में इनपुट प्रकार कैसे परिभाषित किए जाते हैं।
  • DTO का उपयोग करके उन्हें Spring Boot रिज़ॉल्वर में लागू किया।
  • और बेहतर पठनीयता, पुन: उपयोग तथा आसान सत्यापन जैसे उनके प्रमुख लाभों का पता लगाया।

मज़बूत और उपयोगकर्ता-अनुकूल GraphQL API बनाने के लिए ये आवश्यक हैं! अभ्यास करते रहें!

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

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

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

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

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

क्या “म्यूटेशन के लिए इनपुट प्रकारों का उपयोग” पाठ निःशुल्क है?

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

“म्यूटेशन के लिए इनपुट प्रकारों का उपयोग” में मैं क्या सीखूँगा?

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

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

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

“म्यूटेशन के लिए इनपुट प्रकारों का उपयोग” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. नेस्टेड ऑब्जेक्ट और संबंधों का मॉडल बनाना
  2. इंटरफ़ेस और यूनियन प्रकार लागू करना
  3. म्यूटेशन के लिए इनपुट प्रकारों का उपयोग
  4. एनम और कस्टम स्केलर प्रकार
← Spring Boot के साथ GraphQL APIs पर वापस जाएँ