Alamofire URLSession बनाम: स्विफ्ट में नेटवर्किंग के लिए एक तुलना

Alamofire और URLSession दोनों स्विफ्ट में नेटवर्क अनुरोध करने में आपकी मदद करते हैं। URLSession API नींव के ढांचे का हिस्सा है, जबकि Alamofire को बाहरी निर्भरता के रूप में जोड़ा जाना चाहिए। कई डेवलपर्स को संदेह है कि स्विफ्ट में नेटवर्किंग जैसी किसी बुनियादी चीज़ पर अतिरिक्त निर्भरता को शामिल करना आवश्यक है या नहीं। अंत में, यह महान URLSession API के साथ एक नेटवर्किंग परत को लागू करने के लिए पूरी तरह से संभव है जो आजकल उपलब्ध हैं।

यह ब्लॉग पोस्ट दोनों चौखटों की तुलना करने और यह पता लगाने के लिए है कि बाहरी निर्भरता के रूप में अल्मॉफायर को कब जोड़ा जाए।

यह अलमॉफायर की वास्तविक शक्ति को दर्शाता है क्योंकि रूपरेखा बहुत सारी चीजों को आसान बनाती है।

अलमॉफायर क्या है?

जहां URLSession मानक फाउंडेशन ढांचे के भीतर पाया जा सकता है, हमें अल्मोफायर को खोजने के लिए जीथब पर जाना होगा। यह एक खुला स्रोत है और इसके मालिकाना हक Alamofire Software Foundation के पास है। इस ब्लॉग पोस्ट को लिखने के क्षण में आप आँकड़े से पढ़ सकते हैं, यह रूपरेखा बहुत लोकप्रिय है:

  • 164 योगदानकर्ता
  • 30K + तारे
  • कोकोआपोड्स सांख्यिकी और 600K + एप्स के अनुसार 42 मिलियन (!!) डाउनलोड होते हैं जो इसका उपयोग कर रहे हैं

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

Alamofire का नाम Alamo Fire Flower, Bluebonnet के हाइब्रिड वेरिएंट, टेक्सास के आधिकारिक राज्य फूल के नाम पर रखा गया है।

तुलना में Alamofire और URLSession

मैंने ट्विटर पर अपने अनुयायियों से पूछा कि वे क्या उपयोग करना पसंद करते हैं: अल्मोफ़ायर या URLSession।

यह पता चला है कि डेवलपर्स के बीच एक स्पष्ट अलगाव है जो अलमॉफायर या URLSession का उपयोग करना पसंद करते हैं। यहां एक बड़ा सवाल यह है कि क्या वे केवल इसे पसंद करते हैं या क्या वे वास्तव में पसंद के ढांचे के साथ जाना चाहते हैं।

Alamofire को “स्विफ्ट में एलिगेंट नेटवर्किंग” के रूप में विज्ञापित किया जा रहा है, जो इसके इरादे को थोड़ा पहले ही दूर कर देता है। यह सामान्य नेटवर्किंग सुविधाओं को लागू करने के लिए आसान बनाने के लक्ष्य के साथ URLSession के शीर्ष पर एक परत है।

सुविधाएँ जो अलमॉफायर के साथ लागू करना आसान हैं

Alamofire में एक नेटवर्किंग अनुरोध के निर्माण के अलावा बहुत सारे अतिरिक्त तर्क होते हैं। इन सुविधाओं से फर्क पड़ सकता है और कभी-कभी आप इन्हें बनाने की तुलना में बहुत समय बचा सकते हैं।

उनके रिपॉजिटरी रीडमी पर विज्ञापित सुविधाओं की सूची लंबी है, जिसमें से उनमें से कुछ ही वास्तव में अद्वितीय अतिरिक्त मूल्य जोड़ते हैं:

  • प्रमाणपत्र पिनिंग। इसे छाँटने और इसे स्वयं बनाने में कुछ समय लग सकता है।
  • पुनः प्रयास करने का अनुरोध। जब प्रमाणीकरण विफलता के कारण एक अनुरोध उदाहरण के लिए विफल हो जाता है, तो आप अपने प्रमाणीकरण टोकन को आसानी से ताज़ा कर सकते हैं और कार्यान्वयन कोड को छूने के बिना उसी अनुरोध को फिर से लागू कर सकते हैं।

इन सुविधाओं के अलावा, अनुरोधों के निर्माण के लिए वाक्यविन्यास बहुत अधिक सुरुचिपूर्ण और उपयोग में आसान है। यह आपको बहुत अतिरिक्त कोड से बचाता है और सत्यापन और त्रुटि को बहुत आसान बना देता है।

अक्सर एक लाभ के रूप में देखा जाता है जो नेटवर्क की पहुंच प्रबंधक है। हालाँकि, iOS 12 के बाद से हम नए NWPathMonitor API का उपयोग कर सकते हैं।

तुलना में एक नेटवर्क अनुरोध का निर्माण

मान लें कि हमारे पास एक एपीआई है जो हमें "न्यूयॉर्क हाइलाइट्स" शीर्षक के साथ एक नया बोर्ड बनाने की अनुमति देता है। इसके लिए, Alamofire कोड का उपयोग करना बहुत आसान है:

AF.request ("https://api.mywebserver.com/v1/board", विधि: .get, पैरामीटर: ["शीर्षक": "न्यूयॉर्क हाइलाइट्स"])
    .validate (स्थितिकोड: 200 .. <300)
    .responseDecodable {(प्रतिक्रिया: DataResponse) में
        प्रतिक्रिया स्विच करें।
        मामला। असफल (लेट बोर्ड):
            प्रिंट ("बनाया गया बोर्ड शीर्षक \ _ (बोर्ड.टाइटल)" है) // न्यूयॉर्क हाइलाइट्स
        मामला। विफलता (त्रुटि दें):
            प्रिंट ("बोर्ड निर्माण त्रुटि के साथ विफल: \
        }
}

URLSession API के साथ ठीक ऐसा ही करने के लिए थोड़ा और काम करना पड़ता है।

enum त्रुटि: Swift.Error {
    मामला अनुरोध
}

// URL बनाएँ
var घटक = URLCompords (string: "https://api.mywebserver.com/v1/board")!
Components.queryItems = ["शीर्षक": "न्यूयॉर्क हाइलाइट्स"]। मानचित्र {(कुंजी, मूल्य) में
    URLQueryItem (नाम: कुंजी, मूल्य: मूल्य)
}

// अनुरोध को उत्पन्न और निष्पादित करें
विनती करना = प्रयत्न करना! URLRequest (url: Components.url !, विधि: .get)
URLSession.saring.dataTask (साथ: अनुरोध) {(डेटा, प्रतिक्रिया, त्रुटि) में
    करना {
        गार्ड डेटा = डेटा,
            प्रतिक्रिया देना = प्रतिक्रिया के रूप में? HTTPURLResponse, (200 .. <300) ~ = response.statusCode,
            त्रुटि == नील बाकी {
            // डेटा शून्य था, सत्यापन विफल हुआ या कोई त्रुटि उत्पन्न हुई।
            त्रुटि फेंकें ?? Error.requestFailed
        }
        लेट बोर्ड = कोशिश करें JSONDecoder ()। डीकोड (बोर्ड। स्वयं, से: डेटा)
        प्रिंट ("बनाया गया बोर्ड शीर्षक \ _ (बोर्ड.टाइटल)" है) // न्यूयॉर्क हाइलाइट्स
    } पकड़ {
        प्रिंट ("बोर्ड निर्माण त्रुटि के साथ विफल: \ (error.localizedDescription)")
    }
}

यह अलमॉफायर की वास्तविक शक्ति को दर्शाता है क्योंकि रूपरेखा बहुत सी चीजों को आसान बनाती है:

  • अनुरोध एक इनिशियलाइज़र के भीतर निर्मित होता है
  • URL एनकोडर डिफ़ॉल्ट रूप से पैरामीटर को एन्कोडिंग करता है
  • सत्यापन एक साधारण एक-लाइनर के साथ इनलाइन किया जाता है और सत्यापन विफल होने पर एक दृढ़ता से टाइप की गई त्रुटि में परिवर्तित हो जाता है। अनुक्रिया प्रतिक्रिया परिणाम विफलता मामले में यह त्रुटि लौटाएगी।
  • एक सामान्य पूर्ण कॉलबैक हमारे कस्टम बोर्ड प्रकार में प्रतिक्रिया को डिकोड करना आसान बनाता है

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

एक निर्भरता के रूप में अल्मोफायर को जोड़ना कितना बुरा होगा?

आइए यह स्पष्ट करें कि आपको अपनी परियोजना में बाहरी निर्भरता जोड़ते समय सावधान रहना होगा। जब इसका रखरखाव, परीक्षण या उपयोग नहीं किया जाता है, तो यह आपकी परियोजना में एक संभावित जोखिम जोड़ सकता है। अंत में, आपको स्वयं विकास जारी रखना पड़ सकता है।

अल्मोफायर के मामले में, आपको वास्तव में इस बारे में चिंता करने की ज़रूरत नहीं है। रूपरेखा अच्छी तरह से बनाए रखा है, परीक्षण किया है, और इस्तेमाल किया। ढांचा काफी छोटा है और यह नेटवर्क अनुरोधों को लिखने के लिए अधिक सुरुचिपूर्ण बनाता है।

निष्कर्ष: निर्णय कैसे करें?

Alamfore की तुलना अक्सर AFNetworking से की जाती है, नेटवर्किंग के लिए Objective-C समतुल्य रूपरेखा। उस समय, नेटवर्किंग URL URL के बिना बहुत कठिन था, जो केवल iOS 7 के बाद से मौजूद है। इसलिए, अपने जीवन को थोड़ा आसान बनाने के लिए AFNetworking जैसे ढांचे के लिए चुना जाना अधिक स्पष्ट था।

आजकल, उपलब्ध URLSession API को देखते हुए, नेटवर्क अनुरोधों का निर्माण करना बहुत आसान है। हालाँकि, ऐसा करने की संभावना आपको URLSession के शीर्ष पर अपनी नेटवर्किंग परत बनाने की ओर ले जाएगी। इस परत का परीक्षण करने की आवश्यकता है और संभावित रूप से आपकी परियोजना के विकसित होते ही अधिक जटिल परत की ओर बढ़ सकती है।

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

यह ब्लॉग पोस्ट URLSession की तुलना Alamofire 5 से कर रहा है, जो लेखन के समय बीटा में है। आप यहाँ इस रिलीज़ के बारे में अधिक पढ़ सकते हैं।

मूल रूप से स्विफ्टली में प्रकाशित।

अधिक पोस्ट और अपडेट: @twannl