एक एपीआई बनाते समय मुझे छोटे कार्यों और कई कॉल, या कुछ कॉल और बड़े कार्यों के साथ रहना चाहिए?


25

मेरे पास एक रेल प्लेटफॉर्म है जिसे मैं बनाए रखता हूं। इसके शीर्ष पर बहुत सारे विभिन्न वेब अनुप्रयोग निर्मित हैं। हालाँकि अब एक क्लाइंट एक एपीआई के लिए पूछ रहा है ताकि वे उपयोगकर्ताओं को अपनी साइट पर रख सकें, लेकिन हमारे पास मौजूद कुछ स्वचालित कार्यों का लाभ उठाएं।

प्लेटफ़ॉर्म का उपयोग बीमा अनुप्रयोगों के निर्माण के लिए किया जाता है और उनकी खरीद के लिए ऑनलाइन अनुमति देता है, साथ ही आपकी नीति से संबंधित दस्तावेज़ डाउनलोड करने के तरीके भी प्रदान करता है।

तो एपीआई का निर्माण करते समय मेरा प्रश्न यह है:

जब मैं बहुत कुछ करना है, की तरह validate, एक बनाने user, user profileऔर policy, काफी एक ही समय में। क्या मुझे 4 अलग एपीआई कॉल करने चाहिए, और ग्राहक को अपनी तरफ से 4 कॉल बनाने चाहिए। या मेरे पास एक कॉल होना चाहिए जो बहुत सारे मापदंडों को स्वीकार करता है, जो क्लाइंट को मान्य करता है और एक ही समय में उन सभी 3 चीजों को बनाता है, जो क्लाइंट के लिए चीजों को सरल बनाता है?

क्लाइंट, इस मामले में, एक ही समय में सभी आवश्यक जानकारी प्राप्त करता है, इसलिए इसका ऐसा नहीं है कि उनके आवेदन में एक प्राकृतिक प्रवाह है जहां यह रुकता है और वे मेरे प्लेटफॉर्म पर एपीआई कॉल कर सकते हैं।

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

आप कैसे सुझाव देते हैं कि मैं इससे निपटूं?

एक नोट के रूप में, मैं ग्राहकों को अपनी ओर से एक जटिल एपीआई को लागू करने की क्षमता में बहुत आश्वस्त नहीं हूं।

जवाबों:


32

कैसे दोनों के बारे में? एक " निम्न स्तर " (ताकि बोलने के लिए) एपीआई है जो सिस्टम के कार्यों को उजागर करता है और एक और "परत" है जो उन सेवाओं को उजागर करता है जो एक ग्राहक करना चाह सकता है। यह परत आवश्यक निम्न स्तर के एपीआई का उपयोग करती है, लेकिन यदि ग्राहक उन्हें चाहते हैं तो वे अभी भी उजागर होते हैं।

अद्यतन: दूसरों द्वारा किए गए कुछ शानदार बिंदुओं और टिप्पणियों को भी शामिल करना।

  1. इस बात पर विचार करें कि क्या क्लाइंट को कभी भी छोटे एपीआई तरीकों में से एक को कॉल करने की आवश्यकता होती है जैसे कि क्या यह भी कॉल करने योग्य है बिना createUser को भी कॉल किए बिना createUserProfile? यदि नहीं, तो उस विधि को उजागर न करें। धन्यवाद NoobsArePeople2

  2. एक सरल लेकिन उत्कृष्ट बिंदु। एक एपीआई में कुछ को उजागर करने के साथ महत्वपूर्ण बिंदु - आप इसे कभी भी अनपेक्षित नहीं कर सकते। कार्य करने के लिए आवश्यक न्यूनतम को बेनकाब करें और फिर सब कुछ और ... अच्छी तरह से उजागर करने के बजाय विस्तार करें, फिर इसके नग्न और परिवर्तन करना शर्मनाक और अजीब हो सकता है । धन्यवाद माइकलटी


10
+1 इस तरह से कुछ कहने वाला था। पूछने के लिए एक और सवाल: क्या आप कभी भी क्लाइंट पर अलगाव में इनमें से कोई भी काम करेंगे। उदाहरण के लिए, क्या क्लाइंट को कभी createUserProfileभी बिना कॉल करने की आवश्यकता होगी createUser? यदि नहीं, तो इसे उजागर न करें।
NoobsArePeople2

4
@ NoobsArePeople2 उत्कृष्ट बिंदु पर अगर जरूरत नहीं है तो इसे उजागर न करें
dreza

9
एक एपीआई में कुछ को उजागर करने के साथ महत्वपूर्ण बिंदु - आप कभी भी इसका विरोध नहीं कर सकते। कार्य करने के लिए आवश्यक न्यूनतम को बेनकाब करें और फिर सब कुछ और ... अच्छी तरह से उजागर करने के बजाय विस्तार करें, फिर इसके नग्न और परिवर्तन करना शर्मनाक और अजीब हो सकता है।

1
@ryanOptini हां, यही वह रेखा है जो मैं नीचे जाती। लेकिन अगर आप उन कॉल को एपीआई फैशन में डिज़ाइन करते हैं, तो उन्हें परत को उजागर करना एक समस्या नहीं होनी चाहिए।
dreza

1
@ryanOptini ने क्या कहा।
NoobsArePeople2

10

मुझे लगता है कि आप इसे गलत तरीके से देख रहे हैं। बड़े की चिंता मत करो | छोटे कॉल या बहुत सारे | कुछ कॉल।

व्यावसायिक वस्तुओं और क्रियाओं के बारे में सोचें जिनके साथ प्रदर्शन किया जा सकता है | के लिए | उन वस्तुओं के खिलाफ।

तुम्हें मिल गया है:

  • उपयोगकर्ता
  • नीतियाँ
  • दरें
  • ...

तो आपको उन वस्तुओं के आसपास एपीआई कॉल बनाना चाहिए।

  • User.Create
  • User.UpdatePassword
  • Policy.Validate
  • ...

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

बड़ी, ऑल-इन-वन टाइप कॉल के साथ समस्या साइड इफेक्ट्स का खतरा है। यदि नीति। क्रिएट भी एक उपयोगकर्ता को जन्म देती है और कुछ अन्य कार्रवाई को ट्रिगर करती है, तो यह प्रोग्रामर की उम्मीद को तोड़ देगा। इसी तरह, बहुत सी छोटी कॉलें प्रोग्रामर को A और B को कॉल करने के लिए याद रखने के लिए मजबूर करती हैं और फिर "सिंगल" बिजनेस ऑपरेशन करने के लिए C को याद करती हैं।

और आप किस प्रकार कॉल करते हैं, यह इस पर आधारित होगा कि रेल और आपकी सहायक वेब सेवाएं किस आधार पर समर्थन करेंगी।

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


4

मुझे लगता है कि आपकी आंत की भावना सही है - उपभोक्ताओं के लिए एपीआई को सरल बनाएं। कुछ हद तक, यह उपभोक्ता प्रेरित अनुबंधों के पीछे का दर्शन है ।

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


1
इसके अलावा, साधारण एपीआई का मतलब बड़े कार्यों से नहीं है। एपीआई फ़ंक्शन केवल एक "ऑर्केस्ट्रेटर" हो सकता है जो कुछ आंतरिक लाइब्रेरी फ़ंक्शन को कॉल करता है, जो बदले में अन्य कार्यों को कॉल करता है, जब तक कि आपके कोड में सही स्तर की ग्रेन्युलैरिटी न हो।
मिसको

3

व्यक्तिगत रूप से, मुझे एपीआई पसंद है:

  1. इस तरह से अनुकूलित किया जाता है कि आम उपयोग के मामलों को आसानी से निष्पादित किया जा सके
  2. CRUD ऑपरेशन से संबंधित कॉल बैच उन्मुख हैं या बैच संस्करण हैं
  3. परावर्तन की अनुमति देता है (इसलिए अन्य कंप्यूटर भाषाओं के लिए प्लगइन्स या बाइंडिंग लिखने वाले लोग इस प्रक्रिया को स्वचालित कर सकते हैं)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.