रिज़ॉल्वर और सब्सक्रिप्शन
डेटा प्राप्त करने और उसमें बदलाव करने के लिए GraphQL रिज़ॉल्वर लागू करें तथा रीयल-टाइम डेटा अपडेट के लिए सब्सक्रिप्शन सेट अप करें।
रिज़ॉल्वर और सब्सक्रिप्शन, CoddyKit पर NestJS एंटरप्राइज़ बैकएंड API का एक निःशुल्क पाठ है। यह 3 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह NestJS एंटरप्राइज़ बैकएंड API सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। NestJS एंटरप्राइज़ बैकएंड API पाठ्यक्रम में कुल 3 पाठ शामिल हैं।
GraphQL रिज़ॉल्वर का परिचय
NestJS में GraphQL रिज़ॉल्वर की दुनिया में आपका स्वागत है! रिज़ॉल्वर आपके GraphQL एपीआई का मुख्य भाग होते हैं और आपके GraphQL स्कीमा तथा एप्लिकेशन के डेटा स्रोतों के बीच सेतु का काम करते हैं।
- वे यह परिभाषित करते हैं कि आपकी स्कीमा के किसी विशिष्ट फ़ील्ड का डेटा कैसे प्राप्त किया जाए।
- इन्हें ऐसे फ़ंक्शन समझें जो GraphQL क्वेरी या म्यूटेशन में संबंधित फ़ील्ड का अनुरोध किए जाने पर चलते हैं।
- रिज़ॉल्वर डेटाबेस, REST एपीआई या किसी अन्य डेटा स्रोत के साथ काम कर सकते हैं।
NestJS में रिज़ॉल्वर की संरचना
NestJS डेकोरेटर का उपयोग करके रिज़ॉल्वर बनाना आसान बनाता है। आप एक क्लास को रिज़ॉल्वर के रूप में परिभाषित करते हैं और फिर अलग-अलग GraphQL कार्रवाइयों के लिए विशिष्ट डेकोरेटर का उपयोग करते हैं:
@Resolver(): किसी क्लास को GraphQL रिज़ॉल्वर के रूप में चिह्नित करता है।@Query(): किसी मेथड को GraphQL क्वेरी कार्रवाई (डेटा प्राप्त करना) से जोड़ता है।@Mutation(): किसी मेथड को GraphQL म्यूटेशन कार्रवाई (डेटा में बदलाव) से जोड़ता है।@Subscription(): किसी मेथड को GraphQL सब्सक्रिप्शन कार्रवाई (रीयल-टाइम डेटा) से जोड़ता है।
एक बुनियादी क्वेरी लागू करना
आइए एक सरल क्वेरी रिज़ॉल्वर बनाएँ, जो 'Hello world!' स्ट्रिंग लौटाता है। इससे क्वेरी के बुनियादी सेटअप का प्रदर्शन होता है:
import { Module, Injectable } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { join } from 'path';
import { Query, Resolver } from '@nestjs/graphql';
@Injectable()
class AppService {
getHello(): string {
return 'Hello world!';
}
}
@Resolver()
class AppResolver {
constructor(private readonly appService: AppService) {}
@Query(() => String)
hello(): string {
return this.appService.getHello();
}
}
@Module({
imports: [
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
}),
],
providers: [AppResolver, AppService],
})
class AppModule {}
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();क्वेरी आर्ग्युमेंट संभालना
डेटा को फ़िल्टर करने या निर्दिष्ट करने के लिए क्वेरी में अक्सर आर्ग्युमेंट की आवश्यकता होती है। GraphQL अनुरोध से आर्ग्युमेंट निकालने के लिए @Args() डेकोरेटर का उपयोग करें।
यहाँ हम एक ऐसी क्वेरी बनाएँगे जो किसी विशिष्ट नाम का अभिवादन करती है।
import { Module, Injectable } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { join } from 'path';
import { Args, Query, Resolver } from '@nestjs/graphql';
@Injectable()
class AppService {
getGreeting(name: string): string {
return `Hello, ${name}!`;
}
}
@Resolver()
class AppResolver {
constructor(private readonly appService: AppService) {}
@Query(() => String)
greet(@Args('name') name: string): string {
return this.appService.getGreeting(name);
}
}
@Module({
imports: [
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
}),
],
providers: [AppResolver, AppService],
})
class AppModule {}
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();GraphQL म्यूटेशन का परिचय
जहाँ क्वेरी डेटा प्राप्त करती हैं, वहीं सर्वर पर डेटा में बदलाव करने के लिए म्यूटेशन का उपयोग किया जाता है। इसमें रिकॉर्ड बनाना, अपडेट करना या हटाना जैसी कार्रवाइयाँ शामिल हैं।
- म्यूटेशन की संरचना क्वेरी जैसी होती है, लेकिन वे स्पष्ट रूप से किसी साइड इफ़ेक्ट का संकेत देते हैं।
- वे आमतौर पर बदली गई ऑब्जेक्ट या सफलता दर्शाने वाली स्थिति लौटाते हैं।
- NestJS में इन्हें परिभाषित करने के लिए
@Mutation()डेकोरेटर का उपयोग करें।
एक बुनियादी म्यूटेशन लागू करना
आइए एक सरल 'Item' जोड़ने के लिए म्यूटेशन बनाएँ। हम एक Item प्रकार और ऐसा म्यूटेशन परिभाषित करेंगे जो एक नाम लेता है और नया बनाया गया आइटम लौटाता है।
import { Module, Injectable, Field, ObjectType, InputType } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { join } from 'path';
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
@ObjectType()
class Item {
@Field(() => String)
id: string;
@Field(() => String)
name: string;
}
@Injectable()
class ItemsService {
private readonly items: Item[] = [];
create(name: string): Item {
const newItem = { id: String(this.items.length + 1), name };
this.items.push(newItem);
return newItem;
}
findAll(): Item[] { return this.items; }
}
@Resolver(() => Item)
class ItemsResolver {
constructor(private readonly itemsService: ItemsService) {}
@Query(() => [Item])
items(): Item[] {
return this.itemsService.findAll();
}
@Mutation(() => Item)
createItem(@Args('name') name: string): Item {
return this.itemsService.create(name);
}
}
@Module({
imports: [
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
}),
],
providers: [ItemsResolver, ItemsService],
})
class AppModule {}
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();GraphQL सब्सक्रिप्शन क्या होते हैं
सब्सक्रिप्शन GraphQL की ऐसी सुविधा है जो क्लाइंट को सर्वर से रीयल-टाइम अपडेट प्राप्त करने देती है। क्वेरी और म्यूटेशन के विपरीत, जो अनुरोध-प्रतिक्रिया पर आधारित होते हैं, सब्सक्रिप्शन लंबे समय तक खुले रहने वाले कनेक्शन होते हैं और आमतौर पर WebSockets के माध्यम से काम करते हैं।
- क्लाइंट के सब्सक्राइब करने पर वह एक स्थायी कनेक्शन खोलता है।
- कोई विशिष्ट घटना होने पर सर्वर क्लाइंट को डेटा भेजता है।
- ये चैट एप्लिकेशन, लाइव डैशबोर्ड या सूचनाओं के लिए बहुत उपयोगी हैं।
सब्सक्रिप्शन के लिए PubSub सेट अप करना
सब्सक्रिप्शन लागू करने के लिए NestJS GraphQL अक्सर graphql-subscriptions के PubSub (प्रकाशित-प्राप्त करें) तंत्र का उपयोग करता है। सर्वर घटनाएँ प्रकाशित करता है और सब्सक्राइबर उनके लिए प्रतीक्षा करते हैं।
आपको सब्सक्रिप्शन के लिए GraphQLModule कॉन्फ़िगर करना होगा और एक PubSub इंस्टेंस उपलब्ध कराना होगा।
import { Module, Injectable } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { join } from 'path';
import { PubSub } from 'graphql-subscriptions';
// We need a module to provide PubSub
@Module({
providers: [
{
provide: 'PUB_SUB', // Token for PubSub instance
useValue: new PubSub(),
},
],
exports: ['PUB_SUB'], // Export to use in other modules
})
class PubSubModule {}
@Module({
imports: [
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
// Crucial for subscriptions:
subscriptions: {
'graphql-ws': true, // Enable WebSocket for subscriptions
'subscriptions-transport-ws': true,
},
}),
PubSubModule,
],
// No resolvers needed for this example, just setup
})
class AppModule {}
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
console.log('GraphQL server with subscriptions running on port 3000');
}
bootstrap();एक सब्सक्रिप्शन लागू करना
अब आइए एक सब्सक्रिप्शन बनाएँ! हम एक postAdded सब्सक्रिप्शन बनाएँगे, जो म्यूटेशन के माध्यम से नई पोस्ट बनाए जाने पर हर बार एक घटना भेजेगा।
- सब्सक्रिप्शन मेथड परिभाषित करने के लिए
@Subscription()का उपयोग करें। - घटनाएँ प्रकाशित करने के लिए
PubSubइंजेक्ट करें। - म्यूटेशन इस घटना को सक्रिय करेगा।
import { Module, Injectable, Field, ObjectType, Inject } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { join } from 'path';
import { Args, Mutation, Query, Resolver, Subscription } from '@nestjs/graphql';
import { PubSub } from 'graphql-subscriptions';
const POST_ADDED_EVENT = 'postAdded';
@ObjectType()
class Post {
@Field(() => String)
id: string;
@Field(() => String)
title: string;
@Field(() => String)
content: string;
}
@Injectable()
class PostsService {
private readonly posts: Post[] = [];
create(title: string, content: string): Post {
const newPost = { id: String(this.posts.length + 1), title, content };
this.posts.push(newPost);
return newPost;
}
findAll(): Post[] { return this.posts; }
}
@Module({
providers: [
{
provide: 'PUB_SUB', // Token for PubSub instance
useValue: new PubSub(),
},
],
exports: ['PUB_SUB'], // Export to use in other modules
})
class PubSubModule {}
@Resolver(() => Post)
class PostsResolver {
constructor(
private readonly postsService: PostsService,
@Inject('PUB_SUB') private pubSub: PubSub,
) {}
@Query(() => [Post])
posts(): Post[] {
return this.postsService.findAll();
}
@Mutation(() => Post)
async createPost(
@Args('title') title: string,
@Args('content') content: string,
): Promise<Post> {
const newPost = this.postsService.create(title, content);
await this.pubSub.publish(POST_ADDED_EVENT, { postAdded: newPost });
return newPost;
}
@Subscription(() => Post, { name: POST_ADDED_EVENT })
postAdded() {
return this.pubSub.asyncIterator(POST_ADDED_EVENT);
}
}
@Module({
imports: [
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
subscriptions: {
'graphql-ws': true,
'subscriptions-transport-ws': true,
},
}),
PubSubModule,
],
providers: [PostsResolver, PostsService],
})
class AppModule {}
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
console.log('GraphQL server with subscriptions running on port 3000');
console.log('Try a POST_ADDED_EVENT subscription in your client!');
}
bootstrap();रिज़ॉल्वर और सब्सक्रिप्शन की जाँच
NestJS GraphQL रिज़ॉल्वर और सब्सक्रिप्शन के बारे में आपके ज्ञान की जाँच करने का समय आ गया है!
पुनरावलोकन: रिज़ॉल्वर और रीयल-टाइम सुविधाएँ
बधाई हो! आपने NestJS में GraphQL रिज़ॉल्वर और सब्सक्रिप्शन की आवश्यक बातें समझ ली हैं।
- रिज़ॉल्वर आधार का काम करते हैं और आपकी स्कीमा को डेटा से जोड़ते हैं।
- क्वेरी डेटा प्राप्त करती हैं, म्यूटेशन डेटा बदलते हैं और सब्सक्रिप्शन रीयल-टाइम अपडेट प्रदान करते हैं।
- हमने सरल क्वेरी और म्यूटेशन लागू करना तथा सब्सक्रिप्शन के लिए
PubSubका उपयोग करके रीयल-टाइम सुविधाएँ सेट अप करना सीखा।
गतिशील और तुरंत प्रतिक्रिया देने वाले GraphQL एपीआई बनाने के लिए अभ्यास करते रहें!
एआई शिक्षक के साथ TypeScript सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 20
- पाठ
- 76
अक्सर पूछे जाने वाले प्रश्न
क्या “रिज़ॉल्वर और सब्सक्रिप्शन” पाठ निःशुल्क है?
हाँ—“रिज़ॉल्वर और सब्सक्रिप्शन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और NestJS एंटरप्राइज़ बैकएंड API पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। NestJS एंटरप्राइज़ बैकएंड API पाठ्यक्रम में कुल 3 पाठ शामिल हैं।
“रिज़ॉल्वर और सब्सक्रिप्शन” में मैं क्या सीखूँगा?
डेटा प्राप्त करने और उसमें बदलाव करने के लिए GraphQL रिज़ॉल्वर लागू करें तथा रीयल-टाइम डेटा अपडेट के लिए सब्सक्रिप्शन सेट अप करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ NestJS एंटरप्राइज़ बैकएंड API का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या NestJS एंटरप्राइज़ बैकएंड API शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर NestJS एंटरप्राइज़ बैकएंड API शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 3 में से 3वाँ पाठ है।
“रिज़ॉल्वर और सब्सक्रिप्शन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस NestJS एंटरप्राइज़ बैकएंड API पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर NestJS एंटरप्राइज़ बैकएंड API पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- GraphQL की मूल बातें
- NestJS GraphQL सेटअप
- रिज़ॉल्वर और सब्सक्रिप्शन