GraphQL في Swift: دليل شامل لمكتبة Apollo iOS

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

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

ابدأ الدورة

مكتبة Apollo iOS للعمل مع GraphQL بلغة Swift



Apollo iOS هي مكتبة قوية ومرنة للعمل مع GraphQL في نظام Apple البيئي. توفر لمطوري iOS و macOS أداة مريحة لتنفيذ الاستعلامات والتحويرات والاشتراكات على خوادم GraphQL. على عكس REST API، يسمح GraphQL للعميل بطلب البيانات الضرورية فقط، مما يقلل من حجم حركة المرور ويسرّع عمل التطبيقات. تدعم Apollo iOS بشكل كامل لغة Swift، بما في ذلك الإمكانيات الحديثة للغة مثل async/await و Combine و SwiftUI.



الإمكانيات الرئيسية لـ Apollo iOS

  • توليد الكود: إنشاء تلقائي لنماذج بيانات آمنة من حيث النوع بناءً على مخطط GraphQL.
  • التخزين المؤقت: دعم مدمج لذاكرة تخزين مؤقت طبيعية لتحسين الاستعلامات المتكررة.
  • دعم Swift Concurrency: تكامل كامل مع async/await للعمليات غير المتزامنة.
  • الاشتراكات عبر WebSocket: تنفيذ التحديثات في الوقت الفعلي باستخدام GraphQL subscriptions.
  • Combine و SwiftUI: إمكانية الاستخدام مع أطر العمل التفاعلية من Apple.
  • تعدد المنصات: يعمل على iOS و macOS و tvOS و watchOS.


تثبيت المكتبة

لتثبيت Apollo iOS، استخدم Swift Package Manager. أضف الحزمة في Xcode عبر القائمة File → Add Packages وحدد الرابط:

https://github.com/apollographql/apollo-ios.git

الإصدار: آخر إصدار مستقر (عند وقت الكتابة — 1.15.0).



إعداد Apollo Client

الخطوة الأولى هي إنشاء مثيل من ApolloClient مع رابط خادم GraphQL الخاص بك. مثال على الإعداد الأساسي:

import Apollo

class NetworkService { static let shared = NetworkService() private(set) lazy var apollo: ApolloClient = { let url = URL(string: "https://api.example.com/graphql")! return ApolloClient(url: url) }()}


تنفيذ الاستعلامات (Queries)

يقوم Apollo iOS بتوليد الكود بناءً على مخطط GraphQL. أولاً، حدد الاستعلام في ملف .graphql:

query GetUser($id: ID!) {    user(id: $id) {        id        name        email        posts {            title        }    }}

بعد توليد الكود، قم بتنفيذ الاستعلام:

import Apollo

func fetchUser(id: String) async throws -> GetUserQuery.Data.User? { let query = GetUserQuery(id: id) let result = try await NetworkService.shared.apollo.fetch(query: query) return result.data?.user}


التحويرات (Mutation)

لتغيير البيانات، استخدم التحويرات. مثال على إنشاء منشور جديد:

mutation CreatePost($title: String!, $content: String!) {    createPost(input: { title: $title, content: $content }) {        id        title        createdAt    }}

تنفيذ التحوير في Swift:

func createPost(title: String, content: String) async throws -> CreatePostMutation.Data.CreatePost? {    let mutation = CreatePostMutation(title: title, content: content)    let result = try await NetworkService.shared.apollo.perform(mutation: mutation)    return result.data?.createPost}


العمل مع الاشتراكات (Subscriptions)

للتحديثات في الوقت الفعلي، استخدم الاشتراكات. مثال على الاشتراك في الرسائل الجديدة:

subscription OnNewMessage {    newMessage {        id        text        sender {            name        }    }}

التنفيذ في Swift باستخدام Combine:

import Combine

var cancellables = Set<AnyCancellable>()

func subscribeToMessages() { let subscription = OnNewMessageSubscription() NetworkService.shared.apollo.subscribe(subscription: subscription) .sink { completion in print("Subscription

توصيات