Apollo iOS: عميل GraphQL قوي لتطبيقات Swift
Apollo iOS هي مكتبة حديثة وآمنة من حيث الأنواع للعمل مع GraphQL API على منصات Apple: iOS و macOS و tvOS و watchOS. تم تطويرها بواسطة شركة Apollo GraphQL، وتوفر للمطورين أدوات ملائمة لتنفيذ الاستعلامات والتحويرات والاشتراكات، مع توليد كود Swift مُنمّط بدقة تلقائياً بناءً على مخطط GraphQL الخاص بك.
المكتبة مثالية لبناء تطبيقات الجوال وسطح المكتب الحديثة التي تتطلب مرونة في التعامل مع البيانات، والتخزين المؤقت، والأداء العالي. Apollo iOS يلغي الحاجة إلى تحليل JSON يدوياً ويضمن أمان الأنواع الكامل في مرحلة التجميع.
الميزات الرئيسية
- توليد الكود تلقائياً — بناءً على ملفات .graphql ومخطط الخادم، يتم إنشاء نماذج بيانات مُنمّطة واستعلامات وتحويرات.
- التخزين المؤقت المُطبّع — التخزين المؤقت المدمج يُحدّث واجهة المستخدم تلقائياً عند تغيير البيانات، مع تجنب تكرار الكائنات.
- دعم الاشتراكات عبر WebSocket — تحديثات فورية للدردشات والإشعارات والبيانات الديناميكية الأخرى.
- التكامل مع SwiftUI و Combine — ناشر غير متزامن أصلي و ObservableObject للبرمجة التفاعلية.
- تعدد المهام — جميع طلبات الشبكة تُنفذ في الخلفية، مع بقاء الخيط الرئيسي حراً لواجهة المستخدم.
- دعم تحميل الملفات — العمل مع طلبات multipart لإرسال الصور والمستندات.
التثبيت عبر Swift Package Manager
أضف Apollo iOS إلى مشروعك عبر Xcode أو Package.swift:
// Package.swiftdependencies: [ .package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.0.0")]مثال: إعداد العميل وتنفيذ استعلام
لننشئ نسخة من العميل وننفذ استعلام GraphQL بسيط للحصول على قائمة المستخدمين:
import Apollo
// 1. إنشاء العميلlet url = URL(string: "https://api.example.com/graphql")!let store = ApolloStore()let client = ApolloClient(url: url, store: store)
// 2. تعريف الاستعلام (ملف Users.graphql)// query GetUsers { users { id name email } }
// 3. تنفيذ الاستعلامclient.fetch(query: GetUsersQuery()) { result in switch result { case .success(let graphQLResult): if let users = graphQLResult.data?.users { for user in users { print("\\(user.name) — \\(user.email)") } } case .failure(let error): print("خطأ: \\(error.localizedDescription)") }}العمل مع التحويرات (تعديل البيانات)
مثال على تحوير لإنشاء مستخدم جديد:
// mutation CreateUser($name: String!, $email: String!) {// createUser(name: $name, email: $email) { id name email }// }
let mutation = CreateUserMutation(name: "إيفان بيتروف", email: "ivan@example.com")
client.perform(mutation: mutation) { result in switch result { case .success(let graphQLResult): if let newUser = graphQLResult.data?.createUser { print("تم إنشاء المستخدم: \\(newUser.id)") } case .failure(let error): print("خطأ في الإنشاء: \\(error)") }}الاشتراكات (تحديثات فورية)
للحصول على بيانات في الوقت الفعلي، استخدم الاشتراكات. يتطلب ذلك نقل WebSocket:
import ApolloWebSocket
let webSocketTransport = WebSocketTransport( request: URLRequest(url: URL(string: "wss://api.example.com/graphql")!))let store = ApolloStore()let client = ApolloClient(networkTransport: webSocketTransport, store: store)
// subscription OnUserAdded { userAdded { id name } }let subscription = أيضاً في المكتبة
العمل مع التواريخ في Kotlin: المكتبات والأدوات للتطوير
التحقق من صحة البيانات في TypeScript: مكتبات Zod وYup وio-ts
التخزين المؤقت في Node.js: Redis وMemcached وNode-Cache
تسجيل السجلات لجافا سكريبت (Node.js): أفضل الحلول والمكتبات
العمل مع الصور في Rust: نظرة عامة على مكتبات image و fast_image_resize وغيرها