हिन्दी

स्कीमा स्टिचिंग के साथ ग्राफक्यूएल फेडरेशन की शक्ति को अनलॉक करें। कई सेवाओं से एक एकीकृत ग्राफक्यूएल एपीआई बनाना सीखें, जिससे स्केलेबिलिटी और रखरखाव में सुधार हो।

ग्राफक्यूएल फेडरेशन: स्कीमा स्टिचिंग - एक व्यापक गाइड

आधुनिक एप्लिकेशन विकास के लगातार विकसित हो रहे परिदृश्य में, स्केलेबल और रखरखाव योग्य आर्किटेक्चर की आवश्यकता सर्वोपरि हो गई है। माइक्रोसर्विसेज, अपनी अंतर्निहित मॉड्यूलरिटी और स्वतंत्र तैनाती क्षमता के साथ, एक लोकप्रिय समाधान के रूप में उभरे हैं। हालांकि, कई माइक्रोसर्विसेज का प्रबंधन जटिलताओं को जन्म दे सकता है, खासकर जब क्लाइंट एप्लिकेशन के लिए एक एकीकृत एपीआई को उजागर करने की बात आती है। यहीं पर ग्राफक्यूएल फेडरेशन, और विशेष रूप से स्कीमा स्टिचिंग, काम आता है।

ग्राफक्यूएल फेडरेशन क्या है?

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

ग्राफक्यूएल फेडरेशन के दो प्राथमिक दृष्टिकोण हैं:

यह लेख स्कीमा स्टिचिंग पर केंद्रित है, इसके अवधारणाओं, लाभों, सीमाओं और व्यावहारिक कार्यान्वयन की खोज करता है।

स्कीमा स्टिचिंग को समझना

स्कीमा स्टिचिंग कई ग्राफक्यूएल स्कीमा को एक एकल, सुसंगत स्कीमा में विलय करने की प्रक्रिया है। यह एकीकृत स्कीमा एक मुखौटे के रूप में कार्य करता है, जो क्लाइंट से अंतर्निहित सेवाओं की जटिलता को छुपाता है। जब कोई क्लाइंट स्टिच्ड स्कीमा से अनुरोध करता है, तो गेटवे बुद्धिमानी से अनुरोध को उपयुक्त अंतर्निहित सेवा (सेवाओं) पर भेजता है, डेटा प्राप्त करता है, और क्लाइंट को वापस करने से पहले परिणामों को जोड़ता है।

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

स्कीमा स्टिचिंग में मुख्य अवधारणाएं

स्कीमा स्टिचिंग के लाभ

स्कीमा स्टिचिंग माइक्रोसर्विसेज आर्किटेक्चर को अपनाने वाले संगठनों के लिए कई आकर्षक लाभ प्रदान करता है:

स्कीमा स्टिचिंग की सीमाएं

हालांकि स्कीमा स्टिचिंग कई फायदे प्रदान करता है, इसकी सीमाओं से अवगत होना महत्वपूर्ण है:

स्कीमा स्टिचिंग का व्यावहारिक कार्यान्वयन

आइए Node.js और graphql-tools लाइब्रेरी (स्कीमा स्टिचिंग के लिए एक लोकप्रिय विकल्प) का उपयोग करके स्कीमा स्टिचिंग को कैसे लागू किया जाए, इसके एक सरलीकृत उदाहरण के माध्यम से चलते हैं। इस उदाहरण में दो माइक्रोसर्विसेज शामिल हैं: एक उपयोगकर्ता सेवा और एक उत्पाद सेवा

1. रिमोट स्कीमा को परिभाषित करें

सबसे पहले, प्रत्येक रिमोट सेवा के लिए ग्राफक्यूएल स्कीमा को परिभाषित करें।

उपयोगकर्ता सेवा (user-service.js):


const { buildSchema } = require('graphql');

const userSchema = buildSchema(`
  type User {
    id: ID!
    name: String
    email: String
  }

  type Query {
    user(id: ID!): User
  }
`);

const users = [
  { id: '1', name: 'Alice Smith', email: 'alice@example.com' },
  { id: '2', name: 'Bob Johnson', email: 'bob@example.com' },
];

const userRoot = {
  user: (args) => users.find(user => user.id === args.id),
};

module.exports = {
  schema: userSchema,
  rootValue: userRoot,
};

उत्पाद सेवा (product-service.js):


const { buildSchema } = require('graphql');

const productSchema = buildSchema(`
  type Product {
    id: ID!
    name: String
    price: Float
    userId: ID!  # उपयोगकर्ता सेवा के लिए फॉरेन की
  }

  type Query {
    product(id: ID!): Product
  }
`);

const products = [
  { id: '101', name: 'Laptop', price: 1200, userId: '1' },
  { id: '102', name: 'Smartphone', price: 800, userId: '2' },
];

const productRoot = {
  product: (args) => products.find(product => product.id === args.id),
};

module.exports = {
  schema: productSchema,
  rootValue: productRoot,
};

2. गेटवे सेवा बनाएं

अब, गेटवे सेवा बनाएं जो दो स्कीमा को एक साथ जोड़ेगी।

गेटवे सेवा (gateway.js):


const { stitchSchemas } = require('@graphql-tools/stitch');
const { makeRemoteExecutableSchema } = require('@graphql-tools/wrap');
const { graphqlHTTP } = require('express-graphql');
const express = require('express');
const { introspectSchema } = require('@graphql-tools/wrap');
const { printSchema } = require('graphql');
const fetch = require('node-fetch');

async function createRemoteSchema(uri) {
  const fetcher = async (params) => {
    const response = await fetch(uri, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(params),
    });
    return response.json();
  };

  const schema = await introspectSchema(fetcher);
  return makeRemoteExecutableSchema({
    schema,
    fetcher,
  });
}

async function main() {
  const userSchema = await createRemoteSchema('http://localhost:4001/graphql');
  const productSchema = await createRemoteSchema('http://localhost:4002/graphql');

  const stitchedSchema = stitchSchemas({
    subschemas: [
      { schema: userSchema },
      { schema: productSchema },
    ],
    typeDefs: `
      extend type Product {
        user: User
      }
    `,
    resolvers: {
      Product: {
        user: {
          selectionSet: `{ userId }`,
          resolve(product, args, context, info) {
            return info.mergeInfo.delegateToSchema({
              schema: userSchema,
              operation: 'query',
              fieldName: 'user',
              args: {
                id: product.userId,
              },
              context,
              info,
            });
          },
        },
      },
    },
  });

  const app = express();
  app.use('/graphql', graphqlHTTP({
    schema: stitchedSchema,
    graphiql: true,
  }));

  app.listen(4000, () => console.log('गेटवे सर्वर http://localhost:4000/graphql पर चल रहा है'));
}

main().catch(console.error);

3. सेवाएं चलाएं

आपको उपयोगकर्ता सेवा और उत्पाद सेवा को अलग-अलग पोर्ट पर चलाना होगा। उदाहरण के लिए:

उपयोगकर्ता सेवा (पोर्ट 4001):


const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { schema, rootValue } = require('./user-service');

const app = express();
app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: rootValue,
  graphiql: true,
}));

app.listen(4001, () => console.log('उपयोगकर्ता सेवा http://localhost:4001/graphql पर चल रही है'));

उत्पाद सेवा (पोर्ट 4002):


const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { schema, rootValue } = require('./product-service');

const app = express();
app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: rootValue,
  graphiql: true,
}));

app.listen(4002, () => console.log('उत्पाद सेवा http://localhost:4002/graphql पर चल रही है'));

4. स्टिच्ड स्कीमा से क्वेरी करें

अब आप गेटवे (पोर्ट 4000 पर चल रहे) के माध्यम से स्टिच्ड स्कीमा से क्वेरी कर सकते हैं। आप इस तरह की क्वेरी चला सकते हैं:


query {
  product(id: "101") {
    id
    name
    price
    user {
      id
      name
      email
    }
  }
}

यह क्वेरी आईडी "101" वाले उत्पाद को पुनर्प्राप्त करती है और उपयोगकर्ता सेवा से संबंधित उपयोगकर्ता को भी प्राप्त करती है, यह दर्शाती है कि स्कीमा स्टिचिंग आपको एक ही अनुरोध में कई सेवाओं से डेटा क्वेरी करने की अनुमति कैसे देती है।

उन्नत स्कीमा स्टिचिंग तकनीकें

बुनियादी उदाहरण से परे, यहां कुछ उन्नत तकनीकें हैं जिनका उपयोग आपके स्कीमा स्टिचिंग कार्यान्वयन को बढ़ाने के लिए किया जा सकता है:

स्कीमा स्टिचिंग और अपोलो फेडरेशन के बीच चयन

हालांकि स्कीमा स्टिचिंग ग्राफक्यूएल फेडरेशन के लिए एक व्यवहार्य विकल्प है, अपोलो फेडरेशन अपनी उन्नत सुविधाओं और बेहतर डेवलपर अनुभव के कारण अधिक लोकप्रिय विकल्प बन गया है। यहां दोनों दृष्टिकोणों की तुलना है:

सुविधा स्कीमा स्टिचिंग अपोलो फेडरेशन
स्कीमा परिभाषा मौजूदा ग्राफक्यूएल स्कीमा भाषा का उपयोग करता है निर्देशों के साथ एक घोषणात्मक स्कीमा भाषा का उपयोग करता है
क्वेरी योजना मैन्युअल क्वेरी प्रतिनिधिमंडल की आवश्यकता है अपोलो गेटवे द्वारा स्वचालित क्वेरी योजना
टाइप एक्सटेंशन सीमित समर्थन टाइप एक्सटेंशन के लिए अंतर्निहित समर्थन
की डायरेक्टिव्स समर्थित नहीं है संस्थाओं की पहचान करने के लिए @key निर्देश का उपयोग करता है
डिस्ट्रिब्यूटेड ट्रेसिंग मैन्युअल कार्यान्वयन की आवश्यकता है डिस्ट्रिब्यूटेड ट्रेसिंग के लिए अंतर्निहित समर्थन
टूलिंग और इकोसिस्टम कम परिपक्व टूलिंग अधिक परिपक्व टूलिंग और एक बड़ा समुदाय
जटिलता बड़ी प्रणालियों में प्रबंधन करना जटिल हो सकता है बड़ी और जटिल प्रणालियों के लिए डिज़ाइन किया गया

स्कीमा स्टिचिंग कब चुनें:

अपोलो फेडरेशन कब चुनें:

वास्तविक-विश्व के उदाहरण और उपयोग के मामले

यहां कुछ वास्तविक-विश्व के उदाहरण दिए गए हैं कि कैसे ग्राफक्यूएल फेडरेशन, जिसमें स्कीमा स्टिचिंग भी शामिल है, का उपयोग किया जा सकता है:

स्कीमा स्टिचिंग के लिए सर्वोत्तम प्रथाएं

एक सफल स्कीमा स्टिचिंग कार्यान्वयन सुनिश्चित करने के लिए, इन सर्वोत्तम प्रथाओं का पालन करें:

निष्कर्ष

स्कीमा स्टिचिंग के साथ ग्राफक्यूएल फेडरेशन माइक्रोसर्विसेज आर्किटेक्चर में कई सेवाओं से एकीकृत एपीआई बनाने के लिए एक शक्तिशाली दृष्टिकोण प्रदान करता है। इसकी मूल अवधारणाओं, लाभों, सीमाओं और कार्यान्वयन तकनीकों को समझकर, आप डेटा एक्सेस को सरल बनाने, स्केलेबिलिटी में सुधार करने और रखरखाव को बढ़ाने के लिए स्कीमा स्टिचिंग का लाभ उठा सकते हैं। जबकि अपोलो फेडरेशन एक अधिक उन्नत समाधान के रूप में उभरा है, स्कीमा स्टिचिंग सरल परिदृश्यों के लिए या मौजूदा ग्राफक्यूएल सेवाओं को एकीकृत करते समय एक व्यवहार्य विकल्प बना हुआ है। अपने संगठन के लिए सबसे अच्छा दृष्टिकोण चुनने के लिए अपनी विशिष्ट आवश्यकताओं और आवश्यकताओं पर सावधानीपूर्वक विचार करें।

ग्राफक्यूएल फेडरेशन: स्कीमा स्टिचिंग - एक व्यापक गाइड | MLOG