অনেকগুলি এসিঙ্ক্রোনাস কল বনাম একক কল এপিআইতে


12

আমরা একটি REST এপিআই তৈরি করছি যা অন্যদের মধ্যে জাভাস্ক্রিপ্টের মাধ্যমে এইচটিএমএল 5 ফ্রন্ট্যান্ড ব্যবহার করা হবে। অ্যাপ্লিকেশনটি প্রতিষ্ঠানের মধ্যে ব্যবহারের জন্য এবং সাধারণত প্রায় 300 জন ব্যবহারকারী থাকে তবে আমরা 1000 বা আরও বেশি ব্যবহারকারী পর্যন্ত স্কেল করতে চাই।

সাধারণত এপিআই-তে সংযোগগুলি ল্যানের মধ্যে তৈরি করা হবে তাই সংযোগের গুণগত মান এবং প্রচ্ছন্নতা ভাল হবে, যদিও এটি ইন্টারনেটের মাঝে মাঝে ব্যবহার বাদ দেয় না যেখানে সংযোগগুলি ধীর হতে পারে এবং 3 জি / 4 জি এর মাধ্যমে আরও ল্যাগ থাকতে পারে।

দুটি বিকল্প যা আমরা ভেবেছিলাম তা হ'ল:

  1. সীমানা ইন্টারফেসের বিভিন্ন উপাদান লোড করতে একাধিক একযোগে অ্যাসিনক্রোনাস কল করবে।

    • পেশাদাররা: সরলতা।
    • কনস: সার্ভারের সাথে আরও সংযোগ।
  2. ফ্রন্টএন্ডের নিয়ামকটি পরামিতিগুলির আকার হিসাবে API কে পাস করার জন্য একক কল করবে যা কোন বস্তু আনতে হবে।

    • পেশাদাররা: সার্ভারের সাথে কেবল একটি সংযোগ, যদিও সার্ভারটি ডাটাবেসের সাথে বেশ কয়েকটি সংযোগ তৈরি করবে।
    • কনস: ফ্রন্টএন্ড এবং এপিআই উভয় ক্ষেত্রেই প্রক্রিয়া প্রয়োজন। এটি নকশা জটিল করে তোলে।

আরও ব্যাখ্যা: এখানে বিভিন্ন সংস্থান থাকবে ... / পণ্য ... / অবস্থানসমূহ ইত্যাদি These এই সংস্থানগুলি একাই আনা যেতে পারে তবে আরও একটি বিমূর্ত উত্স থাকবে ... / স্ক্রিন? পণ্য ও অবস্থানগুলি যা উভয়ই একটি কল এনে দেবে।

উত্তর:


14

বিকল্প 1 (একাধিক async কল) সেরা পছন্দ কারণ:

  1. প্রতিটি স্বতন্ত্র কলটি তার নিজস্ব সত্তা , তাই কিছু ব্যর্থ হয়ে গেলে আপনি স্বতন্ত্রভাবে আবার চেষ্টা করতে পারেন। একচেটিয়া 'ওয়ান-কল' আর্কিটেকচারে, যদি কোনও জিনিস ব্যর্থ হয় তবে আপনাকে আবার পুরো কলটি করতে হবে
  2. সার্ভারের সাইড কোডটি সহজ হবে: আবার, মড্যুলারিটি , যার অর্থ বিভিন্ন বিকাশকারী বিভিন্ন এপিআই সংস্থানগুলিতে কাজ করতে পারে
  3. একটি সাধারণ এমভিসি প্যাটার্নে এটির জন্য একটি এপিআই কল লোড একাধিক পৃথক সংস্থান থাকা বোধগম্য নয় ; উদাহরণস্বরূপ, আপনি যদি /productsকোনও পৃষ্ঠায় প্রদর্শন করার জন্য পণ্যের তালিকা পাওয়ার জন্য অনুরোধ করেন এবং জনপ্রিয় পণ্যগুলি বিক্রি হয় এমন জায়গাগুলির একটি তালিকা আপনি প্রদর্শন করতে চান তবে আপনার দুটি পৃথক সংস্থান আছে: Productএবং Location। যদিও সেগুলি একই পৃষ্ঠায় প্রদর্শিত হয়, আপনি যুক্তিযুক্তভাবে কল করতে পারবেন না /productsএবং এটি স্থানগুলিও ফেরত দিতে পারবেন না
  4. আপনার লগিং / ব্যবহারের রিপোর্টগুলি মডিউলার পদ্ধতির মধ্যে সহজ হবে। আপনি যদি অনুরোধ করেন /productsএবং আপনি লোকেশনগুলি লোড করছেন তবে আপনার লগ ফাইলগুলি সত্যই বিভ্রান্তিকর হতে চলেছে
  5. যদি আপনার কোনও নির্দিষ্ট সংস্থান নিয়ে সমস্যা হয়, ওয়ান-কল পদ্ধতির ফলে পুরো পৃষ্ঠাটি নষ্ট হয়ে যাবে এবং এটি কীভাবে ভেঙে গেছে তা আপনার ব্যবহারকারীদের কাছে স্পষ্ট হবে না and এবং এর অর্থ আপনার দলের পক্ষে সমস্যাটি সমাধান করতে আরও সময় লাগবে; যাইহোক, মডিউলার পদ্ধতির মধ্যে যদি একটি জিনিস ব্রেক হয়ে যায় তবে এটি কী স্পষ্ট হয়েছে তা খুব স্পষ্ট হবে এবং আপনি এটি দ্রুত স্থির করতে পারবেন। এটি বাকী পৃষ্ঠাটিও নষ্ট করবে না (যদি বিষয়গুলি খুব ঘনিষ্ঠভাবে মিলিত না হয় ...)
  6. জিনিসগুলি পৃথক করা থাকলে সাধারণভাবে পরিবর্তন করা সহজ হবে; যদি আপনার কাছে একটি এপিআই কল দ্বারা 5 টি সংস্থান লোড করা হয়, আপনি যখন কোনও কিছু পরিবর্তন করতে চান তখন জিনিসগুলি কীভাবে ভাঙ্গবেন না তা নির্ধারণ করা কঠিন হবে

পুরো বিষয়টি হ'ল সংস্থানগুলি পৃথক, এবং একটি "রিভার্ট এপিআই" এর মাধ্যমে একক এপিআই পাথ থেকে পৃথক পৃথক সংস্থান ফিরে পাওয়া কোনও অর্থবোধ করে না, এমনকি যদি আপনি "সার্ভারের সাথে সংযোগগুলি সংরক্ষণ করেন"। যাইহোক, শর্তসাপেক্ষে (বিভিন্ন) সংস্থানগুলি লোড করতে পরামিতিগুলি ব্যবহার করা বিশ্রামযোগ্য নয়।

যা যা বলেছিল, কেবলমাত্র যৌক্তিক বিকল্পটি হ'ল একাধিক অ্যাসিঙ্ক অনুরোধগুলি পৃথক সংস্থানগুলিতে করার জন্য: মডিউলার পদ্ধতিটি গ্রহণ করুন !

পিএস - অকালব্যাপী "সার্ভারের সাথে সংযোগগুলি" দূরে অপ্টিমাইজ করবেন না, বিশেষত যখন HTTP সংযোগগুলি অবিশ্বাস্যভাবে কম ওভারহেড থাকে এবং আপনি ল্যানে থাকেন। ব্যাট থেকে সরাসরি সহজ নকশা বেছে নেওয়ার পরিবর্তে এই ধরণের চিন্তাভাবনা আপনাকে পরবর্তীতে সমস্যায় ফেলতে চলেছে।


1
এছাড়াও, মডিউলার সম্ভবত ইউনিট পরীক্ষার পক্ষে আরও সহজ।
user949300

@ user949300 ভাল কথা, আমি এমনকি এটি ভাবিনি! জিনিসগুলি ডিকপলড হলে ইউনিট টেস্টিংটি আসলে অনেক সহজ হবে।
ক্রিস সাইরেফাইস

দ্রুত এবং বর্ধিত প্রতিক্রিয়ার জন্য ধন্যবাদ। আমি সবার সাথে একমত, তবে আমি মনে করি আমি এটি ঠিক মতো ব্যাখ্যা করি নি। বিভিন্ন সংস্থান / পণ্য / অবস্থান ইত্যাদি থাকবে These এই সংস্থানগুলি একা আনা যেতে পারে তবে সেখানে আরও একটি বিমূর্ত উত্স / পর্দা থাকবে? পণ্য ও অবস্থানগুলি যা উভয়ই এক কল করে আনবে। যাইহোক আমি আরও সহজ উপায় পছন্দ।
ম্যাটিনসাল্টো

@ ম্যাটিনসাল্টো এর মতামতটি /screen?Product&Locationsএকটি খারাপ দৃষ্টিভঙ্গি, কমপক্ষে আমার কাছে REST এপিআই এবং তাদের ব্যবহার করা একটি ওয়েব অ্যাপ্লিকেশন বিকাশযুক্ত সমস্ত অভিজ্ঞতা নিয়ে। খাঁটি একচেটিয়া দৃষ্টিকোণ থেকে (উদাহরণস্বরূপ, রুবেলে রেলগুলিতে), এতে /screenবোঝা যায় যে সংস্থানগুলি Productএবং Locationসংস্থানগুলি উভয়ই পুরোপুরি ঠিক। তবে, বিশ্রামের দৃষ্টিকোণ থেকে, আপনি কখনই একের বেশি লোড করার জন্য কোনও রুট চাইবেন না (যদি না আপনি একবারে আরও ডেটা পাওয়ার জন্য টেবিলগুলিতে যোগদান করেন)। কি /screenকরা উচিৎ মৌলিক বিন্যাস পৃষ্ঠাটি লোড হয় এবং আপনি তথ্য (পেতে আপনার এপিআই AJAX Product, Locationইত্যাদি)।
ক্রিস সাইরেফাইস

@mattinsalto আপনি একটি ওয়েব অ্যাপ্লিকেশন ব্যবহার করার জন্য বিশ্রাম এপিআই (সেইসাথে অন্যান্য বিষয়) উন্নয়নশীল করছেন, তাহলে আপনি শুধু ফোকাস প্রয়োজন তথ্য কম কিভাবে আপনার অ্যাপ্লিকেশান ডেটা ব্যবহার করা যাচ্ছে, এবং। প্রতিটি সংস্থার জন্য REST এপিআই-এর বেসিক ক্রিয়াকলাপগুলি (যেমন আপনার প্রয়োজন হিসাবে) সমর্থন করা উচিত। তারপর, আপনার ওয়েব অ্যাপ্লিকেশন সমস্ত সম্পদ এটা কোনো পৃষ্ঠার জন্য প্রয়োজন লোড (যেমন কি করতে হবে /screenAJAX হবে HTTP GETথেকে /products/popularএবং /locations)। আপনার এপিআই একাধিক বোঝা করছেন এমনটি হওয়া উচিত নয়, কারণ উদাহরণস্বরূপ আপনি কোনও ওয়েব অ্যাপ্লিকেশন বনাম অ্যান্ড্রয়েডে ডেটা একইভাবে প্রদর্শন করবেন না।
ক্রিস সাইরেফাইস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.