2012-06-27 9 views
14

मेरे पास एक तर्कसंगत प्रश्न है: मैं ऐप के साथ सिंक्रनाइज़ेशन से बाहर होने वाले एपीआई को प्रबंधित करने का सबसे अच्छा तरीका जानने का प्रयास कर रहा हूं। इसे समझाने का सबसे अच्छा तरीका उदाहरण के साथ है:आईओएस क्लाइंट/सर्वर ऐप पर अपडेट प्रबंधित करने का सबसे अच्छा तरीका

मान लें कि MyApp संस्करण 1.0 पोस्ट "submit_feedbacK" API पर है जिसके लिए first_name, last_name, और ईमेल की आवश्यकता है।

मैं ऐप स्टोर में MyApp संस्करण 2.0 सबमिट करता हूं। वह संस्करण एपीआई को first_name, last_name, लिंग, और ईमेल पोस्ट करने के लिए डिज़ाइन किया गया है। इन सभी को एपीआई पर आवश्यक फ़ील्ड हैं।

समस्या मेरे पास है: - अगर मैं एपीआई अद्यतन करने से पहले नए एप्लिकेशन के लाइव होने यह संस्करण 1.0 टूट जाएगा - अगर मैं जब तक प्रतीक्षा करें संस्करण 2.0 लाइव है और दूर से 1.0 अपंग, मैं इसे सही ढंग से समय के लिए है।

मुझे लगता है कि 'सही उत्तर' दो अलग-अलग एपीआई बनाए रखना है। लेकिन यदि दोनों एपीआई एक ही लाइव डेटाबेस पर पोस्ट करते हैं, जो चीजों को थोड़ा अजीब बनाता है।

क्या किसी को इसका मॉडल करने के सुझाव हैं?

+2

मेरा मानना ​​है कि सामान्य विचार एपीआई और डेटाबेस संरचना को आजमाने और डिजाइन करना है। अजीबता के शुद्ध कुल को कम करने के लिए इसे थोड़ी देर के लिए परिवर्तन तोड़ने की आवश्यकता नहीं होगी। यदि 'लिंग' का मूल्य 1.0 के पूरे जीवनकाल में बिल्कुल जरूरी नहीं था, तो संभवतः आप उन उपयोगकर्ताओं के बिना कर सकते हैं जिन्होंने अभी तक संस्करण संक्रमण के दौरान इसे सबमिट नहीं किया है। – millimoose

+0

यह सच है - यदि कोई मान प्रदान नहीं किया जाता है, तो नया फ़ील्ड "पुरुष" को भी डिफ़ॉल्ट कर सकता है, क्योंकि विरासत ऐप इसे प्रदान नहीं करेगा। मुझे लगता है कि मैं जटिल परिवर्तनों के बारे में अधिक चिंतित हूं, जैसे कि किसी अवधारणा को फिर से संपर्क करने की आवश्यकता है। लेकिन जैसा कि आपने कहा था, यदि बड़े बदलाव दुर्लभ रहते हैं, तो बाकी को डाउन-टाइम घोषणाओं के माध्यम से संबोधित किया जा सकता है। मुझे यह भी याद आया कि यह ऐप लाइव होने पर चुनना संभव है, जिससे अपडेट को नियंत्रित करने में मदद मिलेगी। वैसे भी, प्रतिक्रिया के लिए धन्यवाद! – Anthony

उत्तर

7

यह प्रश्न iOS consuming API design के साथ कुछ पहलू साझा कर सकता है।

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

अन्य प्रश्न जो मैंने आपको लिंक किया है, इस बारे में एक जवाब देता है कि आप अपने ऐप के विभिन्न संस्करण को एपीआई के सही संस्करण तक कैसे पहुंच सकते हैं।

एक और टिप्पणी यह ​​इंजन या subapps के रूप में अपने एपीआई डिजाइन करने के लिए, और बस उन्हें अलग अंत बिंदुओं पर माउंट (क्या ढांचे का उपयोग कर रहे के आधार पर) आपके लिए आसान हो सकता है। मुझे पता है कि इंजनों का उपयोग करके रेल में आसानी से सक्षम है, और उप-अनुप्रयोगों के साथ app.use() का उपयोग करके एक्सप्रेस के साथ नोड में।

+0

क्या आप कोडिनिटर में ऐसा करने के तरीके के बारे में जानते हैं? मैं सोच रहा था कि प्रत्येक एपीआई संस्करण पुराने संस्करण का विस्तार करे और केवल आवश्यकतानुसार संशोधित करें। –

+0

नहीं, मैं नहीं करता हूं। मैंने CodeIgniter का उपयोग नहीं किया है, हालांकि Google इस पर आपका मित्र हो सकता है। –

0

मैं आपके ऐप के साथ संचार के लिए एक webservice/http endpoint का उपयोग करूंगा। यदि आप ऐप के सभी संस्करणों में एक ही यूआरएल को बनाए रखने के लिए प्राथमिकता रखते हैं, तो सर्वर पर सभी अनुरोधों/पदों में एक संस्करण संख्या शामिल करें ताकि यह जानता है कि उन्हें कैसे संभाला जाए। इससे विकास और परीक्षण भी आसान हो जाएंगे क्योंकि नए संस्करण सर्वर पर नए एपीआई के खिलाफ परीक्षण कर सकते हैं।

इसलिए किसी भी समारोह पर आप वेब सेवा/सर्वर में कॉल कर सकते हैं संस्करण संख्या के साथ एक एकल चर जोड़ें। एक बीईटीई पर्याप्त होना चाहिए क्योंकि मुझे लगता है कि आप एक ही फ़ंक्शन के 256 संस्करणों (यदि कभी भी) हिट करते हैं तो आप शुरू कर सकते हैं और "v1.0 के लिए समर्थन मार सकते हैं"।

एक बार सर्वर डेटा के साथ एक अनुरोध/पोस्ट प्राप्त करता है, तो आप सिर्फ सर्वर एपीआई में एक सरल स्विच/मामले संरचना कोड तो दोनों संस्करणों के लिए काम करता है समर्थन कर सकते हैं।

अगर वे इसी तरह की है, लेकिन जैसे। parametres या कुछ और अदला-बदली, आप इन सभी serverside और बाल/दाल (एन स्तरीय संरचना) समाधान के सर्वर ओर से बनाए रखा जा सकता संभाल कर सकते हैं।

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

आशा है कि यह समझ में आता है, अन्यथा, इस पर टिप्पणी करें और मैं इसे और समझाने की कोशिश करूंगा।

0

बस एफवाईआई, मैं कोडइग्निटर का उपयोग करता हूं। मैं https://github.com/philsturgeon/codeigniter-restserver पर उपलब्ध आरईएसटी नियंत्रक का उपयोग कर रहा हूं। मैं अंतिम रूप से प्रत्येक संस्करण के लिए अलग-अलग अंत बिंदुओं पर निपटने के लिए समाप्त हो गया। असल में मैं प्रत्येक रिलीज के लिए एक नया भंडार जांचता हूं और इसे एक अद्वितीय निर्देशिका में डालता हूं। (यानी http://www.mysite.com/1.0/api/method, http://www.mysite.com/1.1/api/method, आदि) एक कोड-बेस के तहत एक एपीआई के कई संस्करणों को बनाए रखने की कोशिश करना बहुत डरावना लगता है। कम से कम जब मैंने एक संस्करण जारी किया, तो मुझे पता चलेगा कि यह पत्थर में बंद है और मुझे इसे तोड़ने की चिंता करने की ज़रूरत नहीं है। (ध्यान दें: मुझे एक ही डोमेन से चलने वाले एकाधिक कोडइग्निटर उदाहरण प्राप्त करने के लिए एक विशेष। Htaccess tweak का उपयोग करना था। यदि आप चाहें तो मैं इसे साझा कर सकता हूं)

+0

आप कह रहे हैं कि जब आप एक संस्करण (कहें, 2.0) जारी करते हैं, तो आप 2.1 के लिए अपने 2.0 को नए रेपो में प्रभावी ढंग से फोर्क करते हैं? यह दृष्टिकोण उप-ऐप्स/इंजन –

+0

सटीक रूप से अंतिम परिणाम देने लगता है। मैंने इसे एक बड़ा कोडबेस के रूप में रखने की कोशिश करने के बारे में सोचा, लेकिन मैंने जो सवाल उठाया था: जब मेरे पास इस एपीआई के 100 संस्करण हैं (1.0.0, 1.0.1, 1.0.2, 1.1.0, आदि ..), तो करें मैं वास्तव में उन सभी संस्करणों को एक विशाल कोडबेस में रखना चाहता हूं? सरल जवाब नहीं था - वह एक दुःस्वप्न होगा। प्रत्येक एपीआई को फोर्क करने के लिए बेहतर है और इसे दूर कर दें इसलिए मुझे इसे खराब करने की चिंता करने की ज़रूरत नहीं है। प्रत्येक ऐप रिलीज अपने स्वयं के विशिष्ट एपीआई को इंगित कर सकता है और पूर्ववर्ती या भविष्य के संस्करणों के बारे में चिंता नहीं कर सकता, जब तक कि मैं जानबूझकर एक को अक्षम नहीं करता और लोगों को नवीनतम ऐप में माइग्रेट करने के लिए मजबूर करता हूं। – Anthony

+0

डेटाबेस का संस्करण अभी भी एक मुद्दा है, लेकिन मुझे पता चला है कि लगभग सभी मेरे डीबी परिवर्तन कॉलम जोड़ते हैं। मैंने जो कुछ किया है उसकी संरचना में बहुत से बदलाव नहीं हैं। यदि ऐसा है, तो यह विचार करने का समय है कि एक नए प्रकार के मॉडल को बदलें, जैसे "user_v2" और पुराने डेटा को नई संरचना में माइग्रेट करें। कोई भी, वह मेरा दृष्टिकोण था। – Anthony

संबंधित मुद्दे

 संबंधित मुद्दे