यह एक बड़ा सवाल है और इसे पूरा करने के लिए एक लंबे उत्तर की आवश्यकता है, इसलिए मैं सबसे महत्वपूर्ण अंतरों के सबसेट को संबोधित करूंगा। माफी कि यह अभी भी एक लंबा जवाब है।
वे समान कैसे हैं?
आपके कहने पर आप बिल्कुल सही हैं:
बुनियादी उदाहरणों के लिए वे समान लगते हैं
दोनों चौखटे एक ही मूल समस्या को हल कर रहे हैं: नोड में HTTP सर्वर के निर्माण के लिए एक सुविधाजनक एपीआई प्रदान करना। यह कहना है, http
अकेले निचले स्तर के देशी मॉड्यूल का उपयोग करने की तुलना में अधिक सुविधाजनक है । http
मॉड्यूल सब कुछ हम चाहते हैं कर सकते हैं, लेकिन यह साथ आवेदन पत्र लिखने के लिए कठिन है।
इसे प्राप्त करने के लिए, वे दोनों उन अवधारणाओं का उपयोग करते हैं जो लंबे समय से उच्च स्तरीय वेब फ्रेमवर्क में हैं: रूटिंग, हैंडलर, प्लगइन्स, प्रमाणीकरण मॉड्यूल। वे हमेशा एक ही नाम नहीं हो सकता था, लेकिन वे लगभग बराबर हैं।
अधिकांश मूल उदाहरण कुछ इस तरह दिखते हैं:
- एक मार्ग बनाएँ
- जब फ़ंक्शन का अनुरोध किया जाता है, तो प्रतिक्रिया तैयार करते हुए एक फ़ंक्शन चलाएँ
- अनुरोध का जवाब दें
एक्सप्रेस:
app.get('/', function (req, res) {
getSomeValue(function (obj) {
res.json({an: 'object'});
});
});
HAPI:
server.route({
method: 'GET',
path: '/',
handler: function (request, reply) {
getSomeValue(function (obj) {
reply(obj);
});
}
});
अंतर बिल्कुल ठीक नहीं है? तो क्यों एक दूसरे पर चुनते हैं?
वे कैसे अलग हैं?
इसका सरल जवाब है ओपीआई बहुत अधिक है और यह बहुत अधिक आउट-ऑफ-द-बॉक्स करता है। यह स्पष्ट नहीं हो सकता है जब आप बस ऊपर से सरल उदाहरण को देखते हैं। वास्तव में, यह जानबूझकर है। साधारण मामलों को सरल रखा जाता है। तो चलिए कुछ बड़े अंतरों की जाँच करते हैं:
दर्शन
एक्सप्रेस को बहुत कम करने का इरादा है। आपको केवल एक छोटी सी एपीआई के साथ एक पतली डस्टिंग दे कर http
, आप अतिरिक्त कार्यक्षमता जोड़ने के मामले में अपने दम पर बहुत आगे हैं। यदि आप आने वाले अनुरोध (काफी सामान्य कार्य) के शरीर को पढ़ना चाहते हैं, तो आपको एक अलग मॉड्यूल स्थापित करने की आवश्यकता है । यदि आप उस मार्ग पर भेजे जाने वाले विभिन्न सामग्री-प्रकारों की अपेक्षा कर रहे हैं, तो आपको यह देखने के Content-type
लिए कि यह कौन सा है और किसके अनुसार पार्स किया गया है , हेडर को जांचना होगा (उदाहरण के लिए फॉर्म-डेटा बनाम JSON बनाम बहु-भाग), अक्सर अलग-अलग मॉड्यूल का उपयोग करके ।
hapi में एक समृद्ध सुविधा सेट है, जिसे अक्सर कॉन्फ़िगरेशन विकल्पों के माध्यम से उजागर किया जाता है, बजाय कोड लिखे जाने की आवश्यकता होती है। उदाहरण के लिए, यदि हम यह सुनिश्चित करना चाहते हैं कि हैंडलर के चलने से पहले एक अनुरोध निकाय (पेलोड) पूरी तरह से मेमोरी और उचित रूप से पार्स (स्वचालित रूप से सामग्री-प्रकार पर आधारित) में पढ़ा जाए, तो यह एक सरल विकल्प है :
server.route({
config: {
payload: {
output: 'data',
parse: true
}
},
method: 'GET',
path: '/',
handler: function (request, reply) {
reply(request.payload);
}
});
विशेषताएं
आपको केवल यह देखने के लिए दोनों परियोजनाओं पर एपीआई प्रलेखन की तुलना करने की आवश्यकता है कि एचपीआई एक बड़ी सुविधा सेट प्रदान करता है।
हापी में निम्नलिखित कुछ विशेषताएं शामिल हैं, जो उस एक्सप्रेस में निर्मित नहीं हैं (जहाँ तक मुझे पता है):
व्यापकता और प्रतिरूपकता
हैपी और एक्सप्रेस काफी अलग तरीके से एक्स्टेंसिबिलिटी के बारे में बताते हैं। एक्सप्रेस के साथ, आपके पास मिडलवेयर फ़ंक्शंस हैं। मिडलवेयर फ़ंक्शंस एक तरह के फ़िल्टर होते हैं, जिन्हें आप स्टैक करते हैं और आपके हैंडलर को मारने से पहले सभी अनुरोध उनके माध्यम से चलते हैं।
hapi में अनुरोध जीवनचक्र है और विस्तार बिंदु प्रदान करता है , जो कि मिडलवेयर फ़ंक्शंस के लिए तुलनीय है, लेकिन अनुरोध जीवनचक्र में कई परिभाषित बिंदु मौजूद हैं।
वॉलमार्ट ने हपी का निर्माण किया और एक्सप्रेस का उपयोग करना बंद कर दिया, इसका एक कारण यह था कि एक्सप्रेस ऐप को अलग-अलग हिस्सों में विभाजित करना कितना मुश्किल था, और टीम के अलग-अलग सदस्यों को सुरक्षित रूप से काम करना। इस कारण से उन्होंने hapi में प्लगइन सिस्टम बनाया ।
एक प्लगइन एक उप-अनुप्रयोग की तरह है, आप एक हैपी ऐप में सब कुछ कर सकते हैं, मार्गों, एक्सटेंशन बिंदुओं आदि को जोड़ सकते हैं। एक प्लगइन में आप यह सुनिश्चित कर सकते हैं कि आप आवेदन के दूसरे हिस्से को नहीं तोड़ रहे हैं, क्योंकि मार्गों के लिए पंजीकरण मायने नहीं रखता है और आप परस्पर विरोधी मार्ग नहीं बना सकते हैं। फिर आप इस प्लगइन्स को सर्वर में जोड़ सकते हैं और इसे तैनात कर सकते हैं।
पारिस्थितिकी तंत्र
क्योंकि एक्सप्रेस आपको बॉक्स से बहुत कम बाहर देता है, आपको अपने प्रोजेक्ट में कुछ भी जोड़ने की आवश्यकता होने पर बाहर देखना होगा। बहुत बार जब हापी के साथ काम करते हैं, तो आपको जिस सुविधा की आवश्यकता होती है, वह या तो अंतर्निहित होती है या कोर टीम द्वारा बनाया गया एक मॉड्यूल होता है।
मिनिमल बहुत अच्छा लगता है। लेकिन अगर आप एक गंभीर प्रोडक्शन ऐप बना रहे हैं, तो संभावना है कि आपको अंततः इस सामान की ज़रूरत होगी।
सुरक्षा
ब्लैक फ्राइडे ट्रैफ़िक को चलाने के लिए वॉलमार्ट की टीम द्वारा hapi को डिज़ाइन किया गया था, इसलिए सुरक्षा और स्थिरता हमेशा एक शीर्ष चिंता का विषय रहा है। इस कारण से फ्रेमवर्क बहुत सारी चीजें करता है जैसे कि आपकी प्रक्रिया मेमोरी को समाप्त करने से रोकने के लिए आने वाले पेलोड आकार को सीमित करना। इसमें अधिकतम इवेंट लूप विलंब, अधिकतम आरएसएस मेमोरी का उपयोग और वी 8 हीप के अधिकतम आकार जैसी चीजों के विकल्प भी हैं, जिसके आगे आपका सर्वर केवल दुर्घटनाग्रस्त होने के बजाय 503 टाइमआउट के साथ जवाब देगा।
सारांश
इनका मूल्यांकन स्वयं दोनों करें। अपनी जरूरतों के बारे में सोचें और दोनों में से कौन सी आपकी सबसे बड़ी चिंता है। दो समुदायों (IRC, Gitter, Github) में डुबकी लगाएं, देखें कि आप किसे पसंद करते हैं। बस मेरे शब्द मत लो। और खुश हैकिंग!
अस्वीकरण: मैं hapi पर एक पुस्तक के लेखक के रूप में पक्षपाती हूं और उपरोक्त बड़े पैमाने पर मेरी व्यक्तिगत राय है।