عميل HTTP لـ Swift (iOS/macOS): أفضل المكتبات للعمل مع الشبكة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

عميل HTTP لـ Swift (iOS/macOS): أفضل المكتبات للعمل مع الشبكة



عند تطوير تطبيقات iOS وmacOS، يُعد العمل مع طلبات الشبكة من المهام الأساسية. تقدم Swift أدوات مدمجة بالإضافة إلى مكتبات خارجية قوية. في هذه المقالة، سنستعرض أفضل عملاء HTTP لـ Swift، وميزاتهم، وأمثلة على الاستخدام، والسيناريوهات التي يكون فيها كل منهم الأكثر فعالية.



1. URLSession — الأداة القياسية من Apple



URLSession هو إطار عمل مدمج في Foundation لتنفيذ طلبات الشبكة. وهو متاح على جميع منصات Apple، ولا يتطلب تثبيت تبعيات إضافية، وهو مثالي للمشاريع البسيطة.



المزايا:

  • تكامل كامل مع نظام Apple البيئي (جلسات الخلفية، دعم URLSessionWebSocketTask).
  • بدون أي حمل إضافي — لا حاجة لربط مكتبات خارجية.
  • دعم async/await بدءًا من Swift 5.5.


مثال على الكود باستخدام async/await (iOS 15+):

import Foundation

func fetchData() async throws -> Data { let url = URL(string: "https://api.example.com/data")! let (data, response) = try await URLSession.shared.data(from: url) guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else { throw URLError(.badServerResponse) } return data}


2. Alamofire — المعيار الفعلي لطلبات الشبكة



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



الميزات الرئيسية:

  • سلاسل الطلبات والاستجابات.
  • تحويل تلقائي لـ JSON عبر Codable.
  • دعم تحميل/تنزيل الملفات مع تتبع التقدم.
  • جدار حماية شبكي مدمج (Network Reachability).


مثال على طلب GET بسيط:

import Alamofire

AF.request("https://jsonplaceholder.typicode.com/posts/1") .responseDecodable(of: Post.self) { response in switch response.result { case .success(let post): print(post.title) case .failure(let error): print(error.localizedDescription) } }


3. Moya — طبقة تجريد فوق Alamofire لكود نظيف



Moya هي طبقة إضافية فوق Alamofire تقدم كتابة صارمة لنقاط نهاية API من خلال التعدادات (enums). وهذا يتيح تجنب السلاسل السحرية ويسهل الاختبار.



الميزات:

  • كل نقطة نهاية هي حالة منفصلة في enum.
  • دعم مدمج للـ stubs للاختبار.
  • التكامل مع RxSwift و Combine.


مثال على تعريف مزود:

import Moya

enum GitHubAPI { case userRepos(username: String) case repoDetails(owner: String, repo: String)}

extension GitHubAPI: TargetType { var baseURL: URL { URL(string: "https://api.github.com")! } var path: String { switch self { case .userRepos(let username): return "/users/\\(username)/repos" case .repoDetails(let owner, let repo): return "/repos/\\(owner)/\\(repo)" } } var method: Moya.Method { .get } var task: Task { .requestPlain } var headers: [String: String]? { ["Accept": "application/vnd.github.v3+json"] }}


4. Kitura-Net — عميل HTTP من IBM لـ Swift على الخادم



Kitura-Net هو جزء من نظام Kitura البيئي الموجه لتطوير الخادم باستخدام Swift. ومع ذلك، يمكن استخدامه أيضًا في تطبيقات العميل لنظام macOS. يتميز بالتوازي القائم على الأحداث واستهلاك منخفض للذاكرة.



متى تختاره:

  • لتطبيقات الخادم

توصيات