এটি একটি বড় প্রশ্ন এবং সম্পূর্ণ হওয়ার জন্য একটি দীর্ঘ উত্তর প্রয়োজন, সুতরাং আমি কেবল সবচেয়ে গুরুত্বপূর্ণ পার্থক্যের একটি উপসেটটি সম্বোধন করব। দুঃখিত যে এটি এখনও একটি দীর্ঘ উত্তর।
তারা কেমন হয়?
আপনি একেবারে ঠিক বলেছেন যখন আপনি বলেছেন:
প্রাথমিক উদাহরণগুলির জন্য এগুলি একই রকম মনে হয়
উভয় ফ্রেমওয়ার্ক একই বেসিক সমস্যাটি সমাধান করছে: নোডে 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);
});
}
});
পার্থক্য ঠিক এখানে স্থলভাগ না? তাহলে কেন একে অপরকে বেছে নেবেন?
কিভাবে তারা ব্যতিক্রম?
সহজ উত্তরটি হাপি অনেক বেশি এবং এটি বাক্সের বাইরেও অনেক কিছু করে। আপনি যখন উপরের থেকে সহজ উদাহরণটি দেখেন তখন এটি স্পষ্ট নাও হতে পারে। আসলে এটি ইচ্ছাকৃত is সাধারণ কেসগুলি সহজ রাখা হয়। সুতরাং আসুন কিছু বড় পার্থক্য পরীক্ষা করা যাক:
দর্শন
এক্সপ্রেস খুব ন্যূনতম হতে উদ্দেশ্যে করা হয়। উপরে একটি পাতলা ধুলা দিয়ে আপনাকে একটি ছোট্ট এপিআই দিয়ে http
, অতিরিক্ত ক্রিয়াকলাপ যোগ করার ক্ষেত্রে আপনি এখনও নিজেরাই খুব বেশি যদি আপনি আগত অনুরোধের মূল অংশটি (বেশ সাধারণ কাজ) পড়তে চান তবে আপনাকে একটি পৃথক মডিউল ইনস্টল করতে হবে । আপনি যদি সেই রুটে বিভিন্ন সামগ্রী-প্রকারের প্রেরণের প্রত্যাশা করে থাকেন তবে Content-type
এটির যা আছে তা যাচাই করার জন্য আপনাকেও শিরোনামটি পরীক্ষা করে দেখতে হবে এবং সেই অনুসারে এটি বিশ্লেষণ করতে হবে (উদাহরণস্বরূপ ফর্ম-ডেটা বনাম জেএসওএন বনাম মাল্টি-পার্ট), প্রায়শই পৃথক পৃথক মডিউল ব্যবহার করে ।
hapi এর একটি সমৃদ্ধ বৈশিষ্ট্য সেট রয়েছে যা প্রায়শই কনফিগারেশন অপশনের মাধ্যমে প্রকাশ করা হয়, কোড লেখার প্রয়োজন হয় না। উদাহরণস্বরূপ, আমরা যদি হ্যান্ডলারটি চালানোর আগে কোনও অনুরোধের বডি (পেইলড) পুরোপুরি মেমরিতে পড়ে এবং যথাযথভাবে পার্স করা হয় (কনটেন্ট-টাইপের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে) তা নিশ্চিত করতে চাই তবে এটি কেবল একটি সহজ বিকল্প :
server.route({
config: {
payload: {
output: 'data',
parse: true
}
},
method: 'GET',
path: '/',
handler: function (request, reply) {
reply(request.payload);
}
});
বৈশিষ্ট্য
আপনাকে কেবল দুটি প্রকল্পের এপিআই ডকুমেন্টেশন তুলনা করতে হবে তা দেখতে হ্যাপি আরও একটি বড় বৈশিষ্ট্য সেট সরবরাহ করে।
হাপিতে অন্তর্নির্মিত নিম্নলিখিত কয়েকটি বৈশিষ্ট্য অন্তর্ভুক্ত রয়েছে যা এক্সপ্রেস দেয় না (যতদূর আমি জানি):
এক্সটেনসিবিলিটি এবং মডুলারিটি
হাপি এবং এক্সপ্রেস এক্সটেনসিবিলিটি সম্পর্কে বেশ অন্যভাবে যায়। এক্সপ্রেসের সাথে, আপনার মিডলওয়্যার ফাংশন রয়েছে। মিডলওয়্যার ফাংশনগুলি হ'ল ফিল্টারগুলির মতো যা আপনি স্ট্যাক আপ করেন এবং আপনার হ্যান্ডলারটি আঘাতের আগে সমস্ত অনুরোধগুলি সেগুলির মধ্য দিয়ে চলে।
hapi এর কাছে অনুরোধটি জীবনচক্র রয়েছে এবং এটি এক্সটেনশন পয়েন্টগুলি সরবরাহ করে , যা মিডলওয়্যার ফাংশনের সাথে তুলনীয় তবে অনুরোধের লাইফসাইলে বিভিন্ন সংজ্ঞাযুক্ত পয়েন্ট রয়েছে।
ওয়ালমার্ট হাপি তৈরি এবং এক্সপ্রেস ব্যবহার বন্ধ করে দেওয়ার একটি কারণ হ'ল একটি এক্সপ্রেস অ্যাপ্লিকেশনটিকে পৃথক অংশে বিভক্ত করা কতটা কঠিন ছিল তা নিয়ে হতাশা ছিল এবং বিভিন্ন দলের সদস্যরা তাদের খণ্ডে নিরাপদে কাজ করতে পারে। এই কারণে তারা হাপিটিতে প্লাগইন সিস্টেম তৈরি করেছে ।
একটি প্লাগইন একটি সাব-অ্যাপ্লিকেশনটির মতো, আপনি হপি অ্যাপ্লিকেশনটিতে যা কিছু করতে পারেন, রুটগুলি, এক্সটেনশন পয়েন্টগুলি যোগ করতে পারেন ইত্যাদি একটি প্লাগইনে আপনি নিশ্চিত হতে পারেন যে আপনি অ্যাপ্লিকেশনটির অন্য অংশটি ভাঙ্গছেন না, কারণ ক্রম রুটের নিবন্ধকরণগুলি গুরুত্বপূর্ণ নয় এবং আপনি বিরোধী রুট তৈরি করতে পারবেন না। তারপরে আপনি এই প্লাগইনগুলিকে একটি সার্ভারে একত্রিত করতে এবং এটি স্থাপন করতে পারেন।
ইকোসিস্টেম
এক্সপ্রেস আপনাকে বাক্সের বাইরে খুব সামান্য দেয় তাই আপনার প্রকল্পে যখন আপনাকে কিছু যুক্ত করার দরকার হয় তখন আপনাকে বাইরে তাকাতে হবে। হাপির সাথে কাজ করার সময় অনেক সময় আপনার যে বৈশিষ্ট্যটি প্রয়োজন তা হয় অন্তর্নির্মিত বা মূল দলটি তৈরি করেছেন একটি মডিউল।
নূন্যতম দুর্দান্ত লাগছে। তবে আপনি যদি কোনও গুরুতর প্রযোজনীয় অ্যাপ্লিকেশন তৈরি করে থাকেন তবে শেষ পর্যন্ত আপনার এই সমস্ত সামগ্রীর প্রয়োজন হওয়ার সম্ভাবনা রয়েছে।
নিরাপত্তা
ওয়ালমার্টে ব্ল্যাক ফ্রাইডে ট্র্যাফিক চালানোর জন্য দলটি হ্যাপি তৈরি করেছিল যাতে সুরক্ষা এবং স্থিতিশীলতা সর্বদা শীর্ষস্থানের বিষয় been এই কারণে ফ্রেমওয়ার্কটি আপনার প্রক্রিয়াটির স্মৃতিশক্তি ক্লান্ত করতে না দেওয়ার জন্য আগত পেডলোডের আকার সীমাবদ্ধ করার মতো অতিরিক্ত অনেক কিছু করে। এতে সর্বাধিক ইভেন্টের লুপ বিলম্ব, সর্বাধিক আরএসএস মেমরি ব্যবহৃত এবং ভি 8 হিপের সর্বাধিক আকারের মতো বিষয়গুলির জন্য বিকল্প রয়েছে যা আপনার সার্ভারটি কেবল ক্র্যাশ না করে 503 টাইমআউট দিয়ে সাড়া দেবে।
সারসংক্ষেপ
তাদের উভয়কেই মূল্যায়ন করুন। আপনার প্রয়োজনীয়তা এবং দুটির মধ্যে কোনটি আপনার সবচেয়ে বড় উদ্বেগের বিষয়ে চিন্তা করে। দুটি সম্প্রদায়ের (আইআরসি, জিটার, গিথুব) ডুব দিন, দেখুন আপনি কোনটি পছন্দ করেন। শুধু আমার কথা গ্রহণ করবেন না। এবং খুশি হ্যাকিং!
অস্বীকৃতি: হাপি সম্পর্কিত একটি বইয়ের লেখক হিসাবে আমি পক্ষপাতদুষ্ট এবং উপরোক্ত মূলত আমার ব্যক্তিগত মতামত।