REST এপিআই ডিজাইন: API এ একাধিক কল বনাম একক কল


19

আমরা ইকমার্স ওয়েবসাইটের জন্য একটি রেস্ট এপিআই বিকাশ করছি যা মোবাইল অ্যাপ্লিকেশনগুলি গ্রাস করবে।

একটি অ্যাপের হোম পেজে আমাদের একাধিক সংস্থান যেমন স্লাইডার, শীর্ষ ব্র্যান্ড, সেরা বিক্রয় পণ্য, ট্রেন্ডিং পণ্য ইত্যাদি কল করতে হবে need

এপিআই কল করার জন্য দুটি বিকল্প:

একক কল:

www.example.com/api/GetAllInHome

একাধিক কল:

www.example.com/api/GetSliders

www.example.com/api/GetTopBrands

www.example.com/api/GetBestSellingProducts

www.example.com/api/GetTrendingProducts

বিশ্রাম এপি ডিজাইনের জন্য সেরা পন্থা কোনটি - একক বা একাধিক কল, উপকারিতা এবং কনসগুলি ব্যাখ্যা করে?

অনুরোধটির প্রতিক্রিয়া জানাতে আরও বেশি সময় লাগবে কি?

উত্তর:


15

ইন তত্ত্ব একাধিক যুগপত কল নমনীয় এবং মাত্র দ্রুত হয়।

তবে বাস্তবে আপনি যদি কোনও পৃষ্ঠা লোড করেন, এবং তারপরে সেই পৃষ্ঠাটির প্রতিটি অংশ লোড করুন, ফলাফলটি ফিরে না পাওয়া পর্যন্ত লোডিং স্পিনারগুলিকে পুরো জুড়ে প্রদর্শন করে ফলাফলটি ধীর এবং বিরক্তিহীন হয়।

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

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

এছাড়াও, কোনও ক্লায়েন্ট এপিআই কল করার কথা বিবেচনা করুন। এইচটিএমএল সার্ভারের পাশটি উত্পন্ন করুন। যদিও জাভাস্ক্রিপ্ট একক পৃষ্ঠার অ্যাপ্লিকেশন ফ্রেমওয়ার্কগুলি আপনাকে এপিআই রুটের নিচে নামিয়ে দেয়। এটি সাধারণত উচ্চ ভলিউম ই-কমার্স সাইটের জন্য সর্বোত্তম পদ্ধতির নয়।

এখানে চিত্র বর্ণনা লিখুন


ধন্যবাদ, প্রকৃতপক্ষে এই এপিআই অ্যান্ড্রয়েড এবং আই ফোন অ্যাপ্লিকেশনগুলিতে গ্রাস করা হয়েছে, আমি জানতে চাই যে অ্যাপের হোম পৃষ্ঠাটি কখন লোড হয় আমি যখন সমস্ত সংস্থান পেয়ে যাই যেমন: স্লাইডার, ব্র্যান্ড, পণ্যগুলি একক এপি কল বা স্বতন্ত্র সংস্থার জন্য এপিআই-তে ব্যক্তিগত কল করা উচিত ব্যবহারকারীরা স্ক্রোল ডাউন?
শাইজুত

একই যুক্তি প্রয়োগ করা হয়, যেখানে প্রয়োজন হয় না একইসাথে কলগুলি ছোট করুন। যদিও একটি অ্যাপ্লিকেশন আপনাকে ব্যাকগ্রাউন্ডে তথ্য ডাউনলোড করতে কিছুটা নমনীয়তা দেয়। আপনি একটি getChangesSInce (তারিখ) পদ্ধতির স্যুইচ করতে চাইতে পারেন
ইওয়ান

সুতরাং আপনি উপসংহারে বলছেন, অ্যাপের হোম পৃষ্ঠাটি লোড হয়ে যাওয়ার সাথে সাথে স্লাইডার, ব্র্যান্ড ইত্যাদির জন্য আলাদা আলাদা এপিআই থাকে যখন আপনার পৃষ্ঠার একটি বিভাগ আপডেট করার জন্য আলাদাভাবে আলাদা থাকে তবে একবারে সমস্ত হোম পৃষ্ঠার রিসোর্স রেসপন্সের জন্য কল করার জন্য একক এপিআই থাকা ভাল best ?
শাইজুত

এই বিভাগগুলি কেবল পৃষ্ঠা / প্রধান ডেটা দিয়ে কেন লোড করার উপযুক্ত কারণ না থাকলে তা নয়
ইওয়ান

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

5

টিএল; ডিআর: অন্যান্য সমস্ত অ্যাপ্লিকেশন বিবেচনা বাদ দিয়ে, একক কল করা একাধিক কল করার চেয়ে দ্রুত হবে। অবিচ্ছিন্নভাবে কলগুলি চালানো আপনার ব্যবহারকারীর দৃষ্টিকোণ থেকে প্রদত্ত ক্রিয়াকলাপটি সম্পূর্ণ করার জন্য প্রয়োজনীয় সামগ্রিক সময়কে হ্রাস করতে পারে (যা আপনার প্রয়োজন মতো হতে পারে) তবে সামগ্রিকভাবে, একাধিক কলের জন্য নেওয়া সময়টি আরও দীর্ঘ হতে পারে।

আপনার ক্ষেত্রে যাইহোক, আমি নিশ্চিত না যে এটি সম্পূর্ণ গল্প।

কাগজটির বিভিন্ন ব্যাখ্যার কারণে ধারণাটি জনপ্রিয় করে তুলেছে REST API গুলি কিছুটা অস্পষ্ট শব্দ। এমনকি একটি REST এপিআই গঠন করে এমন কি সবচেয়ে উদার ব্যাখ্যার দ্বারা, যা আপনার কাছে সত্যিকারের উপযুক্ত নয়।

মূল নীতিটি হ'ল আপনার এমন একটি সংস্থান আছে যার উপর আপনি কোনও ক্রিয়া সম্পাদন করতে চান। ইউআরআই আপনার আগ্রহী সেই সংস্থানটি সনাক্ত করে এবং আপনি সেই সংস্থানটিতে কী করতে চান তা নির্দেশ করতে আপনি সাধারণত HTTP ক্রিয়া ব্যবহার করবেন।

আপনার নির্দিষ্ট ক্ষেত্রে, আপনার সমস্ত পদ্ধতির নামে 'get' শব্দটি রয়েছে। আপনি এইচটিটিপি অনুরোধে ব্যবহৃত ক্রিয়াটি পরিবর্তিত হওয়া উচিত যাতে আপনি সেই জায়গায় উপলব্ধ সংস্থানটি 'পেতে' চান।

আপনার ইউআরআই স্কিমটি আপনার API এর ব্যবহারকারীদের জন্য যে সংস্থানগুলি সরবরাহ করতে চাইছেন তার যৌক্তিক শ্রেণিবিন্যাসের প্রতিনিধিত্ব করা উচিত, সুতরাং আপনার ক্ষেত্রে আমি /api/products?category=slidersআপনার পণ্য সংগ্রহগুলি ফিল্টার করার মতো কিছু ব্যবহার করার বিষয়টি বিবেচনা করব । এর অর্থ হ'ল যখন ক্লায়েন্টরা আপনার সমস্ত পণ্য পেতে চায়, তারা কেবল ক্যোয়ারী স্ট্রিংটি বাদ দিতে পারে।


ধন্যবাদ, সুতরাং আপনি urlAPI এর জন্য একক বোঝাতে চাইছেন কিন্তু ক্যোয়ারি স্ট্রিং ব্যবহার করে বিভিন্ন সংস্থানগুলিতে অনুরোধ করা উচিত? , এছাড়াও চেক এই
শাইজুত

হ্যাঁ অ্যাসিঙ্ক্রোনালি আপনার কলগুলি চালানো ডেটা আনার জন্য প্রয়োজনীয় সময়টিকে হ্রাস করবে, তবে সামগ্রিকভাবে, নেওয়া সময়টি আরও বেশি হবে; আরও কলগুলিতে একটি টিসিপি সংযোগের ওভারহেড এবং একটি যোগাযোগ রাউন্ড ট্রিপ পুনরাবৃত্তি করতে হবে। এমনকি keep-aliveআরেন্টের মতো বৈশিষ্ট্যগুলিও এটি পুরোপুরি সরিয়ে ফেলতে চলেছে।
সমৃদ্ধ জিলা

বিভাগটি কোনও পৃথক পণ্য সংস্থার সম্পত্তি হবে। যৌক্তিকভাবে আপনি পণ্যগুলির সংগ্রহ সংগ্রহ করতে এবং নির্দিষ্ট বিভাগে থাকা
সমস্তগুলি

সুতরাং আপনার অর্থ, ব্যবহারকারী যখন অ্যাপটির হোম পেজ খুলবে, তখন একটি কল এপিআই-তে যেতে হবে যা উপরে উল্লিখিত সমস্ত সংস্থান ফিরিয়ে দেয়? বা যখন তিনি স্ক্রোল করেন তখন নির্দিষ্ট সংস্থাগুলির জন্য পৃথক কল করা উচিত যা সর্বোত্তম অনুশীলন?
শাইজুত

এটি আপনার প্রয়োগের প্রতিটি পয়েন্টে আপনার ব্যবহারকারী কী প্রত্যাশা করে তার উপর নির্ভর করে। উদাহরণস্বরূপ, এই ওয়েবসাইটটি ধরুন, আপনি যখন questionsইউআরআই দেখতে পাবেন /questionsতখন আপনি যখন আপনার পছন্দের ট্যাগগুলিতে ক্লিক করেন, ইউআরআই হ'ল/questions/tagged/<tagname>
সমৃদ্ধ জিলা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.