
यह टेम्प्लेट एक Node.js स्टार्टर प्रोजेक्ट प्रदान करता है जिसे एपीआई के लिए ग्राफक्यूएल, रेडिस के साथ कॉन्फ़िगर किया गया है। कैशिंग और अस्थायी डेटा भंडारण, प्रमाणीकरण और प्राधिकरण के लिए JWT, और ORM के लिए Sequelize जो PostgreSQL या MySQL जैसे रिलेशनल डेटाबेस से जुड़ता है। परियोजना में एक मॉड्यूलर संरचना है जो आपको एकीकृत और स्केलेबल सुविधाओं के साथ आधुनिक वेब अनुप्रयोगों को तुरंत विकसित करने की अनुमति देती है।
? परियोजना अवलोकन
यह प्रोजेक्ट एक GraphQL एपीआई के साथ बैकएंड एप्लिकेशन विकसित करना आसान बनाने के लिए डिज़ाइन किया गया है जो डेटा कैशिंग के लिए Redis और एपीआई को सुरक्षित करने के लिए JWT का उपयोग करता है। Sequelize का उपयोग रिलेशनल डेटाबेस के साथ इंटरेक्शन की सुविधा के लिए ORM के रूप में किया जाता है। इसके अलावा, मिडलवेयर है जो प्रमाणीकरण, सत्यापन और लॉगिंग को संभालना आसान बनाता है।
प्रमुख विशेषताऐं
-
ग्राफक्यूएल एपीआई अधिक लचीली और कुशल क्वेरी और डेटा म्यूटेशन के लिए
-
JWT प्रमाणीकरण सुरक्षित टोकन-आधारित प्रमाणीकरण के लिए
-
रेडिस डेटा कैशिंग और एप्लिकेशन प्रदर्शन में सुधार के लिए
-
रिलेशनल डेटाबेस प्रबंधन के लिए ओआरएम को सीक्वेलाइज़ करें
-
केंद्रीकृत प्राधिकरण और अनुरोध प्रबंधन के लिए मिडलवेयर
- स्केलेबिलिटी और आसान रखरखाव के लिए मॉड्यूलर और अच्छी तरह से संरचित
?️ प्रौद्योगिकी का उपयोग किया गया
- Node.js: जावास्क्रिप्ट के साथ सर्वर-साइड एप्लिकेशन बनाने के लिए प्लेटफ़ॉर्म। और अधिक जानें
- ग्राफक्यूएल: एपीआई के लिए क्वेरी भाषा जो कुशल और लचीली डेटा पुनर्प्राप्ति को सक्षम बनाती है। और अधिक जानें
- रेडिस: अस्थायी डेटा स्टोरेज (इन-मेमोरी) जिसका उपयोग अक्सर कैशिंग और मैसेज ब्रोकरिंग के लिए किया जाता है। और अधिक जानें
- JWT: सुरक्षित और सरल टोकन-आधारित प्रमाणीकरण तकनीक। और अधिक जानें
- Sequelize: Node.js के लिए ORM जो PostgreSQL, MySQL और अन्य रिलेशनल डेटाबेस का समर्थन करता है। और अधिक जानें
? किसी प्रोजेक्ट को सेट अप करने और चलाने के चरण
1.
क्लोन रिपॉजिटरी
सबसे पहले, इस टेम्पलेट रिपॉजिटरी को अपनी स्थानीय मशीन पर क्लोन करें:
गिट क्लोन https://gitlab.com/dioarafi1/graphify-api.git
सीडी ग्राफ़िफ़ाइ-एपीआई
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
यदि आप शून्य से शुरू कर रहे हैं, तो एक नया प्रोजेक्ट प्रारंभ करें:
mkdir ब्लॉग-एपीआई
ब्लॉग-एपीआई सीडी
एनपीएम इनिट-वाई
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
2.
निर्भरता स्थापित करना
रिपॉजिटरी को क्लोन करने या एक नया प्रोजेक्ट बनाने के बाद, आवश्यक निर्भरताएं स्थापित करने के लिए कमांड चलाएँ:
यार्न स्थापित करें
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
यह package.json फ़ाइल में सूचीबद्ध सभी निर्भरताएँ स्थापित करेगा।
3.
पर्यावरण विन्यास
प्रोजेक्ट रूट निर्देशिका में एक .env फ़ाइल बनाएं और
Redis, JWT, और डेटाबेस के लिए निम्नलिखित कॉन्फ़िगरेशन जोड़ें:
DATABASE_URL='postgresql://user:password@localhost:5432/mydatabase'
JWT_SECRET='आपका_jwt_secret_key'
REDIS_HOST='लोकलहोस्ट'
रेडिस_पोर्ट='6379'
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
अपने डेटाबेस कॉन्फ़िगरेशन के अनुसार उपयोगकर्ता, पासवर्ड और मायडेटाबेस बदलें।
4.
सीक्वेलाइज़ के साथ डेटाबेस तैयार करना
यदि आपके पास डेटाबेस कॉन्फ़िगर नहीं है, तो सीक्वेलाइज़ प्रारंभ करने और मॉडल बनाने के लिए कमांड चलाएँ:
यार्न सीक्वेलाइज़ इनिट
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
यह आपके प्रोजेक्ट के भीतर एक कॉन्फ़िगरेशन, मॉडल और माइग्रेशन निर्देशिका संरचना तैयार करेगा। इसके बाद, एप्लिकेशन के लिए आवश्यक मॉडल बनाएं जैसे कि
उपयोगकर्ता और पोस्ट, और डेटाबेस में टेबल बनाने के लिए माइग्रेशन करें।
यार्न सीक्वेलाइज़ डीबी:माइग्रेट
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
सुनिश्चित करें कि डेटाबेस चल रहा है (उदाहरण के लिए PostgreSQL या MySQL का उपयोग करके)।
5.
ग्राफक्यूएल सर्वर की स्थापना
अपोलो सर्वर और ग्राफक्यूएल के लिए निर्भरता स्थापित करें:
यार्न अपोलो-सर्वर ग्राफ़कल जोड़ें
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
उसके बाद, एक GraphQL सर्वर कॉन्फ़िगरेशन फ़ाइल, स्कीमा और रिज़ॉल्वर बनाएं। आप ग्राफक्यूएल सर्वर को निम्नलिखित तरीके से कॉन्फ़िगर कर सकते हैं:
src/server.ts
'अपोलो-सर्वर-एक्सप्रेस' से {अपोलोसर्वर} आयात करें;
'एक्सप्रेस' से आयात एक्सप्रेस;
'./graphql' से आयात { typeDefs, रिज़ॉल्वर };
'./middlewares/auth' से आयात { प्रमाणितJWT };
'./config/डेटाबेस' से आयात { सीक्वेलाइज़ };
कॉन्स्ट ऐप = एक्सप्रेस();
// JWT मिडलवेयर का उपयोग करें
ऐप.यूज़(प्रमाणीकरणJWT);
// अपोलो सर्वर प्रारंभ करें
स्थिरांक सर्वर = नया अपोलोसर्वर({
टाइपडेफ़्स,
समाधानकर्ता,
संदर्भ: ({ अनुरोध }) => ({ उपयोगकर्ता: req.user }),
});
सर्वर.एप्लाईमिडलवेयर({ ऐप });
कॉन्स्ट पोर्ट = प्रोसेस.एनवी.पोर्ट || 4000;
ऐप.सुनें(पोर्ट, एसिंक () => {
कंसोल.लॉग(`सर्वर http://localhost पर चल रहा है:${PORT}${server.graphqlPath}`);
प्रतीक्षा करें सीक्वेलाइज़.प्रमाणीकरण();
कंसोल.लॉग('डेटाबेस कनेक्टेड');
});
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
src/graphql/schema.ts
प्रश्नों और उत्परिवर्तनों के लिए ग्राफक्यूएल स्कीमा को परिभाषित करें:
'अपोलो-सर्वर-एक्सप्रेस' से आयात { gql };
निर्यात स्थिरांक प्रकारDefs = gql`
उपयोगकर्ता टाइप करें {
आईडी: आईडी!
उपयोक्तानाम: स्ट्रिंग!
}
पोस्ट टाइप करें {
आईडी: आईडी!
शीर्षक: स्ट्रिंग्स!
सामग्री: तार!
उपयोगकर्ता: उपयोगकर्ता!
}
क्वेरी टाइप करें {
पोस्ट: [पोस्ट]
पोस्ट (आईडी: आईडी!): पोस्ट
उपयोगकर्ता: [उपयोगकर्ता]
}
प्रकार उत्परिवर्तन {
createPost(शीर्षक: स्ट्रिंग!, सामग्री: स्ट्रिंग!): पोस्ट
रजिस्टर (उपयोगकर्ता नाम: स्ट्रिंग!, पासवर्ड: स्ट्रिंग!): उपयोगकर्ता
लॉगिन (उपयोगकर्ता नाम: स्ट्रिंग!, पासवर्ड: स्ट्रिंग!): स्ट्रिंग # JWT टोकन
}
`;
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
src/graphql/resolvers.ts
प्रश्नों और उत्परिवर्तनों के लिए रिज़ॉल्वर लागू करें:
'../मॉडल' से { पोस्ट, उपयोगकर्ता } आयात करें;
'jsonwebtoken' से jwt आयात करें;
'bcryptjs' से bcrypt आयात करें;
निर्यात स्थिरांक रिज़ॉल्वर = {
सवाल: {
पोस्ट: () => पोस्ट.फाइंडऑल(),
पोस्ट: (_, {आईडी }) => Post.findByPk(id),
उपयोगकर्ता: () => User.findAll(),
},
उत्परिवर्तन: {
createPost: async (_, { शीर्षक, सामग्री }, { उपयोगकर्ता }) => {
यदि (! उपयोगकर्ता) नई त्रुटि फेंकें ('प्रमाणीकरण आवश्यक');
स्थिरांक पोस्ट = प्रतीक्षा करें Post.create({ शीर्षक, सामग्री, userId: user.id });
वापसी डाक;
},
रजिस्टर: async (_, { उपयोगकर्ता नाम, पासवर्ड }) => {
स्थिरांक hashedPassword = प्रतीक्षा bcrypt.hash(पासवर्ड, 10);
स्थिरांक उपयोगकर्ता = प्रतीक्षित उपयोगकर्ता.क्रिएट ({उपयोगकर्ता नाम, पासवर्ड: hashedPassword });
उपयोगकर्ता लौटाएँ;
},
लॉगिन: async (_, { उपयोगकर्ता नाम, पासवर्ड }) => {
स्थिरांक उपयोक्ता = प्रतीक्षित उपयोक्ता.findOne({कहाँ: { उपयोक्तानाम } });
यदि (! उपयोगकर्ता) नई त्रुटि फेंकें ('उपयोगकर्ता नहीं मिला');
स्थिरांक मिलान = प्रतीक्षा bcrypt.compare(पासवर्ड, उपयोगकर्ता.पासवर्ड);
यदि (!मैच) नई त्रुटि फेंकें ('अमान्य पासवर्ड');
स्थिरांक टोकन = jwt.sign({ उपयोगकर्ताआईडी: उपयोगकर्ता.आईडी }, प्रक्रिया.env.JWT_SECRET!, {expiresIn: '1h' });
वापसी टोकन;
},
},
};
import { Post, User } from '../models';
import jwt from 'jsonwebtoken';
import bcrypt from 'bcryptjs';
export const resolvers = {
Query: {
posts: () => Post.findAll(),
post: (_, { id }) => Post.findByPk(id),
users: () => User.findAll(),
},
Mutation: {
createPost: async (_, { title, content }, { user }) => {
if (!user) throw new Error('Authentication required');
const post = await Post.create({ title, content, userId: user.id });
return post;
},
register: async (_, { username, password }) => {
const hashedPassword = await bcrypt.hash(password, 10);
const user = await User.create({ username, password: hashedPassword });
return user;
},
login: async (_, { username, password }) => {
const user = await User.findOne({ where: { username } });
if (!user) throw new Error('User not found');
const match = await bcrypt.compare(password, user.password);
if (!match) throw new Error('Invalid password');
const token = jwt.sign({ userId: user.id }, process.env.JWT_SECRET!, { expiresIn: '1h' });
return token;
},
},
};
6.
विकास के लिए सर्वर चलाना
सर्वर को
हॉट-रीलोड के साथ विकास परिवेश में चलाने के लिए, निम्नलिखित कमांड का उपयोग करें:
यार्न देव
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
सर्वर http://localhost:4000 पर चलेगा, और आप एपीआई क्वेरी और म्यूटेशन का परीक्षण करने के लिए
ग्राफक्यूएल प्लेग्राउंड तक पहुंच सकते हैं।
? परियोजना निर्देशिका संरचना
यह प्रोजेक्ट निर्देशिका संरचना एप्लिकेशन के विभिन्न हिस्सों को अलग करने के लिए डिज़ाइन की गई है ताकि इसे अधिक मॉड्यूलर और बनाए रखने में आसान बनाया जा सके:
/myapp
├── स्रोत
│ ├── मिडलवेयर # प्रमाणीकरण (JWT), कैशिंग (रेडिस), और सत्यापन के लिए मिडलवेयर शामिल हैं
│ ├── मार्ग # ग्राफक्यूएल एपीआई समापन बिंदु और रिज़ॉल्वर परिभाषाएँ
│ ├── सेवाएं # मुख्य व्यवसाय तर्क और डेटा प्रोसेसिंग
│ ├── app.ts # एप्लिकेशन और मिडलवेयर इनिशियलाइज़ेशन के लिए मुख्य फ़ाइल
│ ├── ग्राफ़क्यूएल # ग्राफ़क्यूएल कॉन्फ़िगरेशन, स्कीमा और रिज़ॉल्वर को संग्रहीत करता है
│ ├── मॉडल # रिलेशनल डेटाबेस के प्रबंधन के लिए मॉडल को सीक्वेलाइज़ करें
│ ├── config # Redis, JWT, डेटाबेस, आदि के लिए वैश्विक कॉन्फ़िगरेशन फ़ाइल
│ ├── Index.ts # एप्लिकेशन प्रवेश बिंदु, सर्वर और मिडलवेयर प्रारंभ करना
│ ├── रिज़ॉल्वर # प्रश्नों और उत्परिवर्तनों के लिए ग्राफक्यूएल रिज़ॉल्वर शामिल हैं
│ ├──server.ts # अपोलो सर्वर सेटअप और ग्राफक्यूएल कॉन्फ़िगरेशन के लिए फ़ाइलें
│ ├── स्कीमा # ग्राफक्यूएल स्कीमा परिभाषा
│ ├── प्रकार # GraphQL और अन्य के लिए टाइपस्क्रिप्ट प्रकार और इंटरफ़ेस
│ └── utils # सहायक और उपयोगिता कार्य शामिल हैं
├──
.env # पर्यावरण कॉन्फ़िगरेशन फ़ाइलें (रेडिस, जेडब्ल्यूटी सीक्रेट, डेटाबेस यूआरएल)
├── package.json # प्रोजेक्ट मेटाडेटा और निर्भरताएँ
└── tsconfig.json # टाइपस्क्रिप्ट कॉन्फ़िगरेशन
import { Post, User } from '../models';
import jwt from 'jsonwebtoken';
import bcrypt from 'bcryptjs';
export const resolvers = {
Query: {
posts: () => Post.findAll(),
post: (_, { id }) => Post.findByPk(id),
users: () => User.findAll(),
},
Mutation: {
createPost: async (_, { title, content }, { user }) => {
if (!user) throw new Error('Authentication required');
const post = await Post.create({ title, content, userId: user.id });
return post;
},
register: async (_, { username, password }) => {
const hashedPassword = await bcrypt.hash(password, 10);
const user = await User.create({ username, password: hashedPassword });
return user;
},
login: async (_, { username, password }) => {
const user = await User.findOne({ where: { username } });
if (!user) throw new Error('User not found');
const match = await bcrypt.compare(password, user.password);
if (!match) throw new Error('Invalid password');
const token = jwt.sign({ userId: user.id }, process.env.JWT_SECRET!, { expiresIn: '1h' });
return token;
},
},
};
? तैनाती
परियोजना को उत्पादन के लिए तैयार करने के लिए, टाइपस्क्रिप्ट को जावास्क्रिप्ट में बनाने के लिए निम्नलिखित कमांड का उपयोग करें:
यार्न निर्माण
git clone https://gitlab.com/dioarafi1/graphify-api.git
cd graphify-api
आउटपुट डिस्ट/फ़ोल्डर में होगा और उत्पादन सर्वर पर तैनात होने के लिए तैयार होगा।
क्लाउड प्लेटफ़ॉर्म के लिए तैयारी
इस प्रोजेक्ट को निम्नलिखित चरणों के साथ
Heroku, AWS, या DigitalOcean जैसे प्लेटफार्मों पर तैनात किया जा सकता है:
- गिट रिपॉजिटरी में कोड पुश करें (गिटहब, गिटलैब, या अन्य)।
- चयनित क्लाउड प्लेटफ़ॉर्म (रेडिस, जेडब्ल्यूटी सीक्रेट, यूआरएल डेटाबेस) पर पर्यावरण चर सेट करें।
- क्लाउड प्लेटफ़ॉर्म से कमांड या एकीकरण का उपयोग करके प्रोजेक्ट को तैनात करें।
? संसाधन
ग्राफक्यूएल दस्तावेज़ीकरण-
रेडिस दस्तावेज़ीकरण-
JWT दस्तावेज़ीकरण-
सीक्वलाइज़ दस्तावेज़ीकरण-
उपरोक्त चरणों का पालन करके, अब आप
Redis, JWT, और Sequelize का उपयोग करके GraphQL API एप्लिकेशन चला और विकसित कर सकते हैं।