अन्य एपीआई डिजाइन: एकाधिक कॉल बनाम एपीआई के लिए एकल कॉल


19

हम ईकामर्स वेबसाइट के लिए एक रेस्ट एपीआई विकसित कर रहे हैं जिसका उपभोग मोबाइल ऐप द्वारा किया जाएगा।

एक ऐप के होम पेज में हमें कई संसाधनों जैसे कि स्लाइडर्स, टॉप ब्रांड्स, बेस्ट सेलिंग प्रोडक्ट्स, ट्रेंडिंग प्रोडक्ट्स आदि को कॉल करने की आवश्यकता होती है।

एपीआई कॉल करने के लिए दो विकल्प:

एकल कॉल:

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

में थ्योरी कई एक साथ कॉल और अधिक लचीला और बस तेजी से कर रहे हैं।

हालाँकि, यदि आप एक पृष्ठ लोड करते हैं, और फिर उस पृष्ठ के प्रत्येक भाग को लोड करते हैं, तो जब तक आपको परिणाम वापस नहीं मिल जाता, तब तक लोडिंग स्पिनरों को प्रदर्शित किया जाता है और परिणाम धीमा और निराश होता है।

इस कारण से डेटा के लिए AJAX के अनुरोधों को संयम से उपयोग किया जाना चाहिए और केवल जब आपके पास पृष्ठ का एक भाग होता है जो लोड करने के लिए धीमा होता है या शेष पृष्ठ पर एक अलग चक्र पर ताज़ा करने की आवश्यकता होती है। एक मास्टर / डिटेल डिस्प्ले कहें, जहां आप मास्टर से एक विकल्प का चयन करना चाहते हैं और मास्टर को पुनः लोड किए बिना संबंधित विवरण प्रदर्शित करते हैं।

एक सामान्य डिजाइन लचीलापन और सूक्ष्म सेवा चिंताओं को कोड करने के लिए अलग-अलग एपीआई रखने के लिए है, लेकिन वेबसाइट में डेटा सर्वर साइड को मिलाएं। ताकि क्लाइंट को अपनी वेबसाइट पर केवल एक ही कॉल करना पड़े। उपयुक्त कैशिंग के साथ एपीआई कॉल तेजी से डेटा सेंटर के भीतर होना चाहिए।

इसके अलावा, कोई क्लाइंट एपीआई कॉल करने पर विचार करें। बस HTML सर्वर पक्ष उत्पन्न करते हैं। हालांकि जावास्क्रिप्ट सिंगल पेज ऐप फ्रेमवर्क आपको एपीआई मार्ग से नीचे धकेलता है। यह आमतौर पर उच्च वॉल्यूम ई-कॉमर्स साइटों के लिए इष्टतम दृष्टिकोण नहीं है।

यहाँ छवि विवरण दर्ज करें


धन्यवाद, वास्तव में यह एपीआई एंड्रॉइड और आई फोन ऐप में खपत होती है, मैं जानना चाहता हूं कि ऐप होम पेज लोड होने पर क्या मुझे सभी संसाधन प्राप्त करना चाहिए जैसे: स्लाइडर्स, ब्रांड, एकल एपीआई कॉल में उत्पाद या व्यक्तिगत संसाधन के लिए एपीआई के लिए व्यक्तिगत कॉल करें उपयोगकर्ता नीचे स्क्रॉल करते हैं?
शाइजुत

एक ही तर्क लागू होता है, जहां आवश्यक नहीं है, साथ-साथ कॉल को कम करें। एक ऐप आपको बैकग्राउंड में जानकारी डाउनलोड करने के लिए थोड़ा अधिक लचीलापन देता है। आप GetChangesSInce (दिनांक) के दृष्टिकोण पर स्विच करना चाह सकते हैं
इवान

तो आप यह निष्कर्ष निकालते हैं कि ऐप के होम पेज पर लोड होने पर सभी होम पेज रिसोर्स रिस्पांस के लिए सिंगल एपीआई के लिए सबसे अच्छा एपीआई है, जब आप अपडेट किए जाने वाले पेज के एक सेक्शन के लिए माइक्रो-सर्विस के लिए अलग-अलग एपीआइ स्लाइडर्स, ब्रांड्स आदि के लिए करते हैं। ?
shaijut

जब तक आपके पास एक अच्छा कारण नहीं है कि उन वर्गों को केवल पृष्ठ / मुख्य डेटा के साथ लोड क्यों नहीं किया जाता है
इवान

मेरे पास आखिरी सवाल है कि कैसे अमेज़न, फ्लिपकार्ट जैसे ऐप काम करेंगे? उपयोगकर्ता द्वारा ऐप खोलने पर क्या वे सभी होम पेज संसाधनों को एक कॉल पर लोड नहीं करते हैं? मैं जानना चाहता हूं कि इस पर सबसे अच्छा तरीका क्या होगा।
शाइजुत

5

TL; DR: एक तरफ से कॉल करने पर एक से अधिक कॉल करने से अन्य सभी एप्लिकेशन विचार अलग-अलग होंगे। कॉल को एसिंक्रोनस रूप से चलाने से आपके उपयोगकर्ता के दृष्टिकोण से दिए गए ऑपरेशन को पूरा करने के लिए आवश्यक कुल समय में कटौती हो सकती है (जो कि अच्छी तरह से आप सभी की आवश्यकता हो सकती है), लेकिन कुल मिलाकर, एकाधिक कॉल के लिए अभी भी अधिक समय लगेगा।

हालांकि आपके मामले में, मुझे यकीन नहीं है कि यह पूरी कहानी है।

पेपर की विभिन्न व्याख्याओं के कारण REST API थोड़ा अस्पष्ट शब्द है, जिसने इस विचार को लोकप्रिय बना दिया। हालांकि, क्या आप वास्तव में फिट नहीं है क्या एक REST एपीआई का गठन की सबसे उदार व्याख्या द्वारा।

मुख्य सिद्धांत यह है कि आपके पास एक संसाधन है जिस पर आप एक कार्य करना चाहते हैं। URI उस संसाधन की पहचान करता है जिसमें आप रुचि रखते हैं, और आप सामान्य रूप से HTTP क्रियाओं का उपयोग करके यह इंगित करेंगे कि आप उस संसाधन के लिए क्या करना चाहते हैं।

आपके विशिष्ट मामले में, आपके सभी तरीकों में उनके नाम में 'गेट' शब्द है। आपको उस स्थान पर उपलब्ध संसाधन को 'प्राप्त' करने के लिए इंगित करने के लिए HTTP अनुरोध में प्रयुक्त क्रिया को बदलना चाहिए।

आपकी URI योजना उन संसाधनों के तार्किक पदानुक्रम का प्रतिनिधित्व करती है, जिन्हें आप अपने API के उपयोगकर्ताओं को उपलब्ध कराना चाहते हैं, इसलिए आपके मामले में मैं /api/products?category=slidersआपके उत्पादों के संग्रह को फ़िल्टर करने के लिए कुछ का उपयोग करने पर विचार करूंगा । इसका मतलब है कि जब ग्राहक आपके सभी उत्पादों को प्राप्त करना चाहते हैं, तो वे बस क्वेरी स्ट्रिंग को छोड़ सकते हैं।


धन्यवाद, इसलिए आप urlएपीआई के लिए सिंगल हैं , लेकिन क्वेरी स्ट्रिंग के उपयोग से विभिन्न संसाधनों के लिए अनुरोध किया जाना चाहिए? , यह भी जाँच इस
शैजुत

हाँ, आपके कॉल को अतुल्यकालिक रूप से चलाने से डेटा लाने के लिए आवश्यक पूर्ण समय कम हो जाएगा, लेकिन कुल मिलाकर, अभी भी लिया गया समय अधिक होगा; अधिक कॉलों में एक टीसीपी कनेक्शन और एक संचार दौर यात्रा के ओवरहेड को दोहराना होता है। यहां तक ​​कि keep-aliveयह पूरी तरह से हटाने के लिए जा रहे हैं जैसी सुविधाओं का उपयोग करते हुए ।
रिचज़िला

श्रेणी एक व्यक्तिगत उत्पाद संसाधन की संपत्ति होगी। तार्किक रूप से आप उत्पादों का संग्रह प्राप्त कर रहे होंगे और उन सभी को निर्दिष्ट श्रेणी के साथ फ़िल्टर कर रहे होंगे
richzilla

तो आपका मतलब है, जब उपयोगकर्ता ऐप का होम पेज खोलता है, तो एक कॉल को एपीआई में जाना चाहिए जो उपरोक्त सभी संसाधनों को वापस करता है? या जब वह स्क्रॉल करता है तो व्यक्तिगत कॉल विशिष्ट संसाधनों के लिए किया जाना चाहिए जो सबसे अच्छा अभ्यास है?
शैजुत

यह इस बात पर निर्भर करता है कि आपका उपयोगकर्ता आपके आवेदन में प्रत्येक बिंदु पर क्या देखने की उम्मीद करता है। उदाहरण के लिए इस वेबसाइट को लें, जब आप questionsयूआरआई पर क्लिक करते हैं /questions, तो जब आप अपने पसंदीदा टैग में से एक पर क्लिक करते हैं, तो यूआरआई होता है/questions/tagged/<tagname>
richzilla
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.