इन लोकप्रिय वेब तकनीकों का उपयोग करके अपना स्वयं का API बनाएं।

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

इस बारे में अधिक जानें कि आप दोनों उत्पादों का उपयोग करके एपीआई कैसे बना सकते हैं।

ग्राफक्यूएल क्या है?

ग्राफक्यूएल एक डेटा क्वेरी और हेरफेर भाषा है आप एपीआई को अधिक सटीक और संक्षिप्त तरीके से बनाने के लिए उपयोग कर सकते हैं। ग्राफक्यूएल एक एपीआई में मौजूद डेटा का पूर्ण और पर्याप्त विवरण प्रदान करता है और क्लाइंट को सटीक डेटा प्राप्त करने की शक्ति देता है।

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

NestJS क्या है?

NestJS एक प्रगतिशील Node.js ढांचा है जिसका उपयोग आप स्केलेबल और कुशल सर्वर-साइड एप्लिकेशन बनाने के लिए कर सकते हैं। NestJS ग्राफकॉल सपोर्ट, GRPC, WebSockets, आदि सहित तेज और आसान विकास के लिए टूलिंग के साथ-साथ कई प्लगइन्स प्रदान करता है।

instagram viewer

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

नेस्टजेएस और मोंगोडीबी के साथ ग्राफकलाइन को लागू करना

NestJS और GraphQL के साथ API बनाने से पहले, आपके पास सही डिपेंडेंसी उपलब्ध होनी चाहिए। आप की जरूरत है Node.js स्थापित करने के लिए और NestJS, जिसे आप चलाकर इंस्टॉल कर सकते हैं एनपीएम आई-जी @nestjs/cli.

निम्न उदाहरण एक साधारण ऐप है जो पुस्तकों के बारे में जानकारी संग्रहीत करता है। नया NestJS एप्लिकेशन बनाने के लिए अपने टर्मिनल में निम्न कमांड चलाएँ:

घोंसला नया 

जेनरेट किए गए एप्लिकेशन की निर्देशिका पर नेविगेट करें () और निम्न आदेश के साथ इसकी निर्भरताओं को स्थापित करें:

$ npm इंस्टाल --save @nestjs/config @nestjs/graphql graphql-tools graphql \
 @nestjs/अपोलो अपोलो-सर्वर-एक्सप्रेस @nestjs/mongoose @types/graphql

ग्राफक्यूएल एपीआई के निर्माण के लिए दो प्रमुख दृष्टिकोण हैं, अर्थात्:

  1. स्कीमा-प्रथम दृष्टिकोण: जहाँ आप स्कीमा परिभाषा फ़ाइलों या SDL में API का वर्णन करते हैं, और NestJS उनके आधार पर टाइपस्क्रिप्ट परिभाषाएँ उत्पन्न करता है।
  2. कोड-प्रथम दृष्टिकोण: जहां आप टाइपस्क्रिप्ट क्लासेस और डेकोरेटर्स का उपयोग करके प्रश्नों, म्यूटेशन और अन्य ग्राफक्यूएल कार्यात्मकताओं को परिभाषित करते हैं, और NestJS उनके आधार पर SDL फाइलें बनाता है।

निम्न उदाहरण वर्णन करता है कि कोड-प्रथम दृष्टिकोण का उपयोग कैसे करें।

सबसे पहले, आपको अपने ग्राफ़कॉल को इनिशियलाइज़ करना होगा ऐप मॉड्यूल और इसे MongoDB डेटाबेस से कनेक्ट करें:

// ऐप.मॉड्यूल.टीएस
आयात { मापांक } से'@nestjs/common';
आयात {ग्राफक्यूएलमॉड्यूल जैसा NestGraphQLModule } से'@nestjs/graphql';
आयात {अपोलोड्राइवर, अपोलोड्राइवर कॉन्फिग} से'@nestjs/अपोलो';
आयात { जोड़ना } से'पथ';
आयात {मोंगोसमॉड्यूल} से'@nestjs/नेवला';
आयात {ऐप नियंत्रक} से'./app.controller';
आयात {एप्लिकेशन सेवा} से'./app.service';
आयात {कॉन्फिगमॉड्यूल, कॉन्फिगसर्विस} से'@nestjs/config';
आयात mongodbConfig से'./config/mongodb.config';

@मापांक({
आयात: [
ConfigModule.forRoot({
लोड: [mongodbConfig],
वैश्विक है: सत्य
}),
NestGraphQLModule.forRootAsync({
चालक: ApolloDriver,
इंजेक्षन: [विन्यास सेवा],
फैक्टरी का प्रयोग करें: async (विन्यास सेवा: विन्यास सेवा) => ({
autoSchemaFile: शामिल हों (प्रक्रिया.cwd (), 'src/schema.gql'),
सब्सक्रिप्शन हैंडलर स्थापित करें: सत्य,
सॉर्टस्कीमा: सत्य,
खेल का मैदान: सत्य,
डिबग: configService.get<बूलियन>("डीबग"),
अपलोड: असत्य,
}),
}),
MongooseModule.forRootAsync({
इंजेक्षन: [विन्यास सेवा],
फैक्टरी का प्रयोग करें: async (विन्यास सेवा: विन्यास सेवा) => ({
यूरी: configService.get ('मोंगो_यूआरआई')
})
}),
],
नियंत्रक: [ऐप नियंत्रक],
प्रदाता: [AppService],
})

निर्यातकक्षा ऐप मॉड्यूल {}

यह मॉड्यूल आयात करता है ग्राफक्यूएलमॉड्यूल से @nestjs/graphql और यह MongooseModule से @nestjs/mongoose जो मोंगोडीबी से जुड़ने में मदद करता है। autoSchemaFile गुण उत्पन्न स्कीमा फ़ाइल का स्थान निर्दिष्ट करता है, और sortSchema संपत्ति सुनिश्चित करती है कि यह फ़ील्ड को वर्णानुक्रम में व्यवस्थित करती है।

यहाँ आपका MongoDB क्या है कॉन्फ़िग फ़ाइल इस तरह दिखनी चाहिए:

आयात {रजिस्टरए} से'@nestjs/config';

/**
 * मोंगो डेटाबेस कनेक्शन कॉन्फ़िगरेशन
 */
निर्यातगलती करना रजिस्टरएएस('मोंगोडब', () => {
कॉन्स्ट {
मोंगो_यूआरआई
} = प्रक्रिया.env;

वापस करना {
उरी: `${MONGO_URI}`,
};
});

ग्राफक्यूएल स्कीमा को परिभाषित करना

ग्राफक्यूएल और मोंगोडीबी कनेक्शन स्थापित करने के बाद, आपको एक स्कीमा उत्पन्न करने के लिए ग्राफक्यूएल प्रश्नों और म्यूटेशन को परिभाषित करना चाहिए (स्कीमा.जीक्यूएल) फ़ाइल।

लेखन प्रश्न

में कोड-प्रथम दृष्टिकोण, आप का उपयोग करके एक मॉडल बनाते हैं वस्तु प्रकार डेकोरेटर। आप बाद में इस मॉडल को एक ग्राफक्यूएल प्रकार में बदल देंगे।

उदाहरण के लिए:

// book.model.ts
आयात {फ़ील्ड, ऑब्जेक्ट टाइप} से'@nestjs/graphql';
आयात {प्रोप, स्कीमा, स्कीमा फैक्ट्री} से'@nestjs/नेवला';
आयात { दस्तावेज़ } सेनेवला;

निर्यातप्रकार BookDocument = पुस्तक और दस्तावेज़;

@वस्तु प्रकार()
@ स्कीमा()
निर्यातकक्षा किताब {
@मैदान()
शीर्षक: डोरी;

@मैदान()
लेखक: डोरी;

@मैदान()
प्रकाशित तिथि: बूलियन;
}

निर्यातकॉन्स्ट BookSchema = SchemaFactory.createForClass (पुस्तक);

ग्राफक्यूएल, डिफ़ॉल्ट रूप से, बनाए गए स्कीमा का उपयोग नहीं कर सकता है। उन्हें कार्यात्मक बनाने के लिए, आपको एक रिज़ॉल्वर सेवा की आवश्यकता होती है जिसमें ग्राफक्यूएल प्रकारों को निष्पादित करने के लिए कार्य शामिल होते हैं। आप के साथ ऐसा कर सकते हैं रिज़ॉल्वर डेकोरेटर।

// Books.resolver.ts
आयात {रिज़ॉल्वर, क्वेरी, म्यूटेशन, आर्ग्स, आईडी} से'@nestjs/graphql';
आयात { किताब } से'./book.model';
आयात {पुस्तक सेवा} से'./books.service';

@Resolver(() => किताब)
निर्यातकक्षा बुकरिज़ॉल्वर {
निर्माता(निजी केवल पढ़ने के लिए पुस्तक सेवा: पुस्तक सेवा) { }

@जिज्ञासा(() => [किताब])
async पुस्तकें(): वादा {
वापस करनायह.bookService.findAll ();
}

@जिज्ञासा(() => किताब)
async किताब(@Args('पहचान', { प्रकार: () => मैंने किया: डोरी): वादा {
वापस करनायह.bookService.findOne (आईडी);
}
}

आप लागू कर सकते हैं पुस्तक सेवा, ऊपर आयात किया गया, इस प्रकार है:

// Books.service.ts
आयात {इंजेक्शन योग्य} से'@nestjs/common';
आयात {इंजेक्टमॉडल} से'@nestjs/नेवला';
आयात { नमूना } सेनेवला;
आयात {पुस्तक, पुस्तक दस्तावेज़} से'./book.model';

@ इंजेक्टेबल()
निर्यातकक्षा पुस्तक सेवा {
निर्माता(@इंजेक्टमॉडल(पुस्तक नाम) निजी पुस्तक मॉडल: मॉडल) { }

async सब ढूँढ़ो(): वादा {
वापस करनायह.bookModel.find().exec();
}

async फाइंडवन (आईडी: डोरी): वादा {
वापस करनायह.bookModel.findById (आईडी) .exec ();
}
}

आपको प्रदाताओं की सूची में BookResolver को भी जोड़ना होगा Books.module.ts.

आयात { मापांक } से"@nestjs/common";
आयात {मोंगोसमॉड्यूल} से"@nestjs/नेवला";
आयात {पुस्तक सेवा} से'./books.service';
आयात {पुस्तक समाधानकर्ता} से'./books.resolver';
आयात {पुस्तक, BookSchema} से'./book.model';

@मापांक({
प्रदाता: [
पुस्तक सेवा,
BookResolver
],
आयात: [MongooseModule.forFeature([
{
नाम: किताब का नाम,
स्कीमा: बुकशेमा,
},
]),
],
})

निर्यातकक्षा पुस्तकें मॉड्यूल {}

उत्परिवर्तन के साथ कार्य करना

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

// book.input.ts
आयात {इनपुट टाइप, फील्ड} से'@nestjs/graphql';

@निवेष का प्रकार()
निर्यातकक्षा बुकइनपुट {
@मैदान()
शीर्षक: डोरी;

@मैदान()
लेखक: डोरी;

@मैदान()
प्रकाशित तिथि: बूलियन
}

अब आप अपडेट कर सकते हैं Books.resolver.ts ऐसा दिखने के लिए:

आयात {रिज़ॉल्वर, क्वेरी, म्यूटेशन, आर्ग्स, आईडी} से'@nestjs/graphql';
आयात { किताब } से'./book.model';
आयात {पुस्तक सेवा} से'./books.service';
आयात {बुकइनपुट} से'./book.input';

@Resolver(() => किताब)
निर्यातकक्षा बुकरिज़ॉल्वर {
निर्माता(निजी केवल पढ़ने के लिए पुस्तक सेवा: पुस्तक सेवा) { }

@उत्परिवर्तन(() => किताब)
async क्रिएटबुक(@Args('इनपुट') इनपुट: BookInput): वादा {
वापस करनायह.bookService.create (इनपुट);
}

@उत्परिवर्तन(() => किताब)
async अपडेटबुक(
@Args('पहचान', { प्रकार: () => मैंने किया: डोरी,
@Args('इनपुट') इनपुट: बुकइनपुट,
): वादा {
वापस करनायह.bookService.update (आईडी, इनपुट);
}

@उत्परिवर्तन(() => किताब)
async पुस्तक हटाएं(@Args('पहचान', { प्रकार: () => मैंने किया: डोरी): वादा {
वापस करनायह.bookService.delete (आईडी);
}
}

और Books.service.ts इस कदर:

आयात {इंजेक्शन योग्य} से'@nestjs/common';
आयात {इंजेक्टमॉडल} से'@nestjs/नेवला';
आयात { नमूना } सेनेवला;
आयात {पुस्तक, पुस्तक दस्तावेज़} से'./book.model';

@ इंजेक्टेबल()
निर्यातकक्षा पुस्तक सेवा {
निर्माता(@इंजेक्टमॉडल(पुस्तक नाम) निजी पुस्तक मॉडल: मॉडल) { }

async बनाएँ (पुस्तक: पुस्तक): वादा {
कॉन्स्ट न्यूबुक = नयायह.bookModel (पुस्तक);
वापस करना न्यूबुक.सेव ();
}

async अपडेट करें (आईडी: डोरी, किताब किताब): वादा {
वापस करनायह.bookModel.findByIdAndUpdate (आईडी, किताब, { नया: सत्य }).exec ();
}

asyncमिटाना(पहचान: डोरी): वादा {
वापस करनायह.bookModel.findByIdAndDelete (id).exec ();
}
}

@उत्परिवर्तन डेकोरेटर एक फ़ंक्शन को म्यूटेशन प्रकार के रूप में चिह्नित करता है और @Args डेकोरेटर फ़ंक्शन में दिए गए किसी भी इनपुट को पकड़ लेता है।

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

आयात {पुस्तक मॉड्यूल} से'./books/books.module';
/**
 * अन्य आयात
*/

@मापांक({
आयात: [
ConfigModule.forRoot({
लोड: [mongodbConfig],
वैश्विक है: सत्य
}),
NestGraphQLModule.forRootAsync({
चालक: ApolloDriver,
इंजेक्षन: [विन्यास सेवा],
फैक्टरी का प्रयोग करें: async (विन्यास सेवा: विन्यास सेवा) => ({
autoSchemaFile: शामिल हों (प्रक्रिया.cwd (), 'src/schema.gql'),
सब्सक्रिप्शन हैंडलर स्थापित करें: सत्य,
सॉर्टस्कीमा: सत्य,
खेल का मैदान: सत्य,
डिबग: configService.get<बूलियन>("डीबग"),
अपलोड: असत्य,
}),
}),
MongooseModule.forRootAsync({
इंजेक्षन: [विन्यास सेवा],
फैक्टरी का प्रयोग करें: async (विन्यास सेवा: विन्यास सेवा) => ({
यूरी: configService.get ('मोंगो_यूआरआई')
})
}),
पुस्तकें मॉड्यूल,
],
नियंत्रक: [ऐप नियंत्रक],
प्रदाता: [AppService],
})

निर्यातकक्षा ऐप मॉड्यूल {}

आप चलाकर कोड का परीक्षण कर सकते हैं एनपीएम रन स्टार्ट: dev आपके टर्मिनल में, और आपका आवेदन पोर्ट पर सफलतापूर्वक प्रारंभ होना चाहिए 3000.

खुला लोकलहोस्ट: 3000/ग्राफ़क्यूएल अपने ब्राउज़र में दिखाने के लिए ग्राफिकल इंटरफ़ेस जहां आप प्रश्नों और म्यूटेशन का परीक्षण कर सकते हैं। यहां एक उदाहरण दिया गया है जो क्वेरी दिखाता है:

और यहाँ उत्परिवर्तन का एक उदाहरण है:

NestJS और GraphQL के साथ कुशल API बनाएं

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

NestJS में एपीआई बनाने के लिए अंतर्निहित कार्यक्षमता है, जिसमें मार्गों को परिभाषित करने के लिए सज्जाकार, उनकी सुरक्षा के लिए गार्ड और अनुरोधों और प्रतिक्रियाओं को संभालने के लिए मिडलवेयर शामिल हैं। यह PostgreSQL, MySQL, और SQLite जैसे अन्य डेटाबेस के साथ-साथ Apollo और TypeGraphQL जैसे अन्य ग्राफक्यूएल पुस्तकालयों का भी समर्थन करता है।