Alamofire vs URLSession: مقارنة للتواصل في Swift

تساعدك كل من Alamofire و URLSession على تقديم طلبات الشبكة في Swift. تعد واجهة برمجة تطبيقات URLSession جزءًا من إطار العمل التأسيسي ، في حين تحتاج Alamofire إلى إضافة تبعية خارجية. يشك العديد من المطورين فيما إذا كانت هناك حاجة لتضمين اعتماد إضافي على شيء أساسي مثل الشبكات في Swift. في النهاية ، يمكن تطبيق طبقة شبكة مع واجهة برمجة تطبيقات URLSession الرائعة المتوفرة في الوقت الحالي.

منشور المدونة هذا موجود هنا لمقارنة الإطارين ومعرفة وقت إضافة تطبيق Alamofire كتبعية خارجية.

هذا يدل على القوة الحقيقية لشركة Alamofire حيث أن الإطار يجعل الكثير من الأمور أسهل.

ما هو ألموفير؟

حيث يمكن العثور على URLSession ضمن إطار عمل المؤسسة القياسي ، يتعين علينا الانتقال إلى جيثب للعثور على ألاموفير. إنه إطار مفتوح المصدر ومملوك لشركة Alamofire Software Foundation. يحظى الإطار بشعبية كبيرة حيث يمكنك القراءة من الإحصائيات في لحظة كتابة منشور المدونة هذا:

  • 164 مساهما
  • 30K + النجوم
  • يتم تنزيل 42 مليون (!!) وفقًا لإحصائيات CocoaPods وتطبيقات 600K + التي تستخدمه

هذه الإحصائيات تجعلها واحدة من أكثر أطر عمل سويفت شعبية. إنه إطار يتم صيانته جيدًا ، وغالبًا ما يستخدم ، مما يجعل تنفيذ الشبكات في تطبيقاتك أسهل.

تم تسمية آلاموفير باسم زهرة ألامو فاير ، وهي نوع هجين من بلوبنيت ، الزهرة الرسمية لولاية تكساس.

Alamofire و URLSession مقارنة

لقد سألت المتابعين على Twitter ما الذي يفضلون استخدامه: Alamofire أو URLSession.

اتضح وجود فصل واضح بين المطورين الذين يفضلون استخدام Alamofire أو URLSession. والسؤال الكبير هنا هو ما إذا كانوا يفضلون ذلك فقط أو ما إذا كانوا يختارون بالفعل الذهاب مع إطار الاختيار كذلك.

يتم الإعلان عن Alamofire باسم "الشبكات الأنيقة في سويفت" التي تتخلى عن نيتها قليلاً بالفعل. إنها طبقة أعلى URLSession بهدف جعل ميزات الشبكات المشتركة أسهل في التنفيذ.

الميزات التي يسهل تنفيذها مع Alamofire

يحتوي Alamofire على الكثير من المنطق الإضافي بصرف النظر عن بناء طلب شبكة. يمكن أن تحدث هذه الميزات فرقًا ويمكن أن توفر لك كثيرًا من الوقت مقارنة ببناءها بنفسك.

قائمة الميزات المعلنة على مستودعها التمهيدي طويلة ، والتي لا يضيف سوى القليل منها قيمة إضافية فريدة من نوعها:

  • تثبيت الشهادة. قد يستغرق الأمر بعض الوقت لفرز هذا وبناء هذا بنفسك.
  • طلبات إعادة المحاولة. عندما يفشل الطلب على سبيل المثال بسبب فشل المصادقة ، يمكنك بسهولة تحديث رمز المصادقة واستدعاء نفس الطلب مرة أخرى دون لمس رمز التنفيذ.

بصرف النظر عن هذه الميزات ، فإن بناء جملة بناء الطلبات هو أكثر أناقة وسهولة في الاستخدام. إنه يوفر عليك الكثير من التعليمات البرمجية ويجعل التحقق من الصحة والخطأ أسهل بكثير.

غالبًا ما ينظر إليه على أنه ميزة مدير إمكانية الوصول إلى الشبكة. ومع ذلك ، نظرًا لأن نظام التشغيل iOS 12 يمكننا الاستفادة من واجهة برمجة تطبيقات NWPathMonitor الجديدة أيضًا.

بناء طلب شبكة مقارنة

دعنا نقول أن لدينا واجهة برمجة التطبيقات التي تتيح لنا إنشاء لوحة جديدة بعنوان "أبرز معالم نيويورك". لهذا ، استخدام Alamofire الكود سهل للغاية:

AF.request ("https://api.mywebserver.com/v1/board" ، الطريقة: .get ، المعلمات: ["title": "New York Highlights"])
    .validate (statusCode: 200 .. <300)
    .responseDecodable {(response: DataResponse) in
        استجابة التبديل.
        حالة. ناجحة (دعنا نركب):
            print ("عنوان لوحة الإنشاء هو \ (board.title)") // أهم معالم نيويورك
        حالة. ملف (اسمحوا خطأ):
            طباعة ("فشل إنشاء لوحة بسبب الخطأ: \ (error.localizedDescription)")
        }
}

يتطلب القيام بنفس الشيء مع واجهة برمجة تطبيقات URLSession المزيد من العمل.

خطأ التعداد: Swift.Error {
    طلب القضية
}

// بناء عنوان URL
var components = URLComponents (string: "https://api.mywebserver.com/v1/board")!
components.queryItems = ["title": "New York Highlights"]. map {(key، value) in
    URLQueryItem (الاسم: المفتاح ، القيمة: القيمة)
}

// توليد وتنفيذ الطلب
دع الطلب = حاول! URLRequest (url: components.url! ، الطريقة: .get)
URLSession.shared.dataTask (مع: request) {(البيانات ، الاستجابة ، الخطأ) في
    فعل {
        الحرس اسمحوا البيانات = البيانات ،
            دع الرد = الاستجابة كما؟ HTTPURLResponse ، (200 .. <300) ~ = response.statusCode ،
            خطأ == لا شيء آخر {
            // البيانات لا شيء ، فشل التحقق من الصحة أو حدث خطأ.
            خطأ رمي ؟؟ Error.requestFailed
        }
        واسمحوا board = try JSONDecoder (). فك شفرة (Board.self ، من: البيانات)
        print ("عنوان لوحة الإنشاء هو \ (board.title)") // أهم معالم نيويورك
    } قبض على {
        طباعة ("فشل إنشاء لوحة بسبب الخطأ: \ (error.localizedDescription)")
    }
}

هذا يدل على القوة الحقيقية لشركة Alamofire حيث أن الإطار يجعل الكثير من الأمور أسهل:

  • الطلب بناء داخل مُهيئ واحد
  • يقوم ترميز URL بترميز المعلمات افتراضيًا
  • تتم عملية التحقق من الصحة مضمنة بخط واحد بسيط وتتحول إلى خطأ مكتوب بشدة إذا فشل التحقق من الصحة. نتيجة التعداد ستعيد هذا الخطأ داخل حالة الفشل.
  • رد اتصال إكمال عام يجعل من السهل فك تشفير الاستجابة في نوع لوحة مخصص لدينا

هذا فقط يمكن أن يكون بالفعل سببا لاختيار Alamofire وتجعل حياتك أسهل. مع استخدام URLSession ، من المحتمل أن ينتهي بك الأمر إلى تكوين برنامج التلفاز الخاص بك ، والذي يتطلب الصيانة والاختبار. في البداية ، قد يبدو هذا قرارًا أفضل مقارنة بإضافة تبعية جديدة ، ولكن مع تطور المشاريع ، قد يكون من السهل أن تتطور طبقة الشبكات الخاصة بك وتصبح أكثر تعقيدًا.

ما مدى سوء إضافة ألموفير كتبعية؟

دعنا نوضح أنه عليك توخي الحذر عند إضافة تبعية خارجية إلى مشروعك. عندما لا يتم الحفاظ عليه أو اختباره أو عدم استخدامه كثيرًا ، يمكن أن يضيف مخاطرة محتملة إلى مشروعك. في النهاية ، قد تضطر إلى مواصلة التطوير بنفسك.

في حالة Alamofire ، لا داعي للقلق بشأن ذلك. يتم صيانة الإطار جيدًا واختباره واستخدامه. إطار العمل صغير جدًا ويجعله أكثر أناقة لكتابة طلبات الشبكة.

الخلاصة: كيفية اتخاذ القرار؟

غالبًا ما تُقارن شركة Alamfore بـ AFNetworking ، وهو الإطار المكافئ Objective-C للشبكات. في ذلك الوقت ، كانت الشبكات أكثر صعوبة بدون واجهة برمجة تطبيقات URLsession التي لا توجد إلا منذ نظام التشغيل iOS 7. لذلك ، كان من الواضح أكثر اختيار إطار مثل AFNetworking لجعل حياتك أسهل قليلاً.

في الوقت الحاضر ، عند النظر إلى واجهات برمجة التطبيقات لعناوين URLSession ، أصبح من السهل جدًا بناء طلبات الشبكة. ومع ذلك ، فمن المحتمل أن يؤدي ذلك إلى تحريكك نحو بناء طبقة الشبكات الخاصة بك أعلى URLSession. يجب اختبار هذه الطبقة ويمكن أن تنمو نحو طبقة أكثر تعقيدًا مع تطور مشروعك.

مع أخذ ذلك في الاعتبار ، مع الأخذ في الاعتبار أن Alamofire يتم صيانته جيدًا واستخدامه من قِبل العديد من المشاريع ، فمن المحتمل أن توفر على نفسك الكثير من المتاعب والوقت من خلال إضافة Alamofire كجهة تبعية.

يقارن منشور المدونة هذا URLSession بـ Alamofire 5 ، والذي يكون في مرحلة تجريبية في وقت كتابة هذا التقرير. يمكنك قراءة المزيد حول هذا الإصدار هنا.

نشرت أصلا في SwiftLee.

المزيد من الوظائف والتحديثات: @ twannl