GraphQL API مع Swift: دليل تعليمي خطوة بخطوة لنظامي iOS وmacOS

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

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

ابدأ الدورة
```html

مقدمة: لماذا GraphQL وSwift؟

تتطلب تطوير تطبيقات iOS وmacOS الحديثة طرقًا مرنة وفعالة للتفاعل مع الخادم. غالبًا ما تؤدي واجهات REST API التقليدية إلى مشكلة over-fetching (الحصول على بيانات زائدة) أو under-fetching (نقص البيانات). GraphQL يحل هذه المشكلات من خلال السماح للعميل بطلب البيانات التي يحتاجها فقط، في طلب واحد.

في هذا البرنامج التعليمي، سنقوم بإنشاء تطبيق كامل بلغة Swift يتفاعل مع GraphQL API. ستتعلم كيفية إعداد المشروع، وتنفيذ الاستعلامات، والتحويرات (mutations)، ومعالجة الأخطاء. سنستخدم Apollo iOS كعميل، وهي المكتبة الأكثر شيوعًا للعمل مع GraphQL في نظام Apple البيئي.

إعداد المشروع وتثبيت Apollo iOS

إنشاء مشروع جديد

افتح Xcode وأنشئ مشروعًا جديدًا لتطبيق iOS أو macOS. سمِّه GraphQLDemo.

تثبيت Apollo iOS عبر Swift Package Manager

  1. في Xcode، انتقل إلى File → Add Packages...
  2. الصق رابط مستودع Apollo: https://github.com/apollographql/apollo-ios.git
  3. اختر أحدث إصدار مستقر واضغط Add Package.
  4. تأكد من إضافة الحزمة إلى target الخاص بتطبيقك.

توليد الكود بناءً على مخطط GraphQL

يستخدم Apollo توليد الكود لإنشاء فئات آمنة من حيث النوع (type-safe). لهذا نحتاج إلى ملف المخطط (schema.graphqls) وملفات الاستعلامات (.graphql).

أنشئ مجلدًا باسم GraphQL في المشروع وضع فيه:

  • schema.graphqls — قم بتنزيل مخطط API الخاص بك أو استخدم مخططًا عامًا (مثل Countries GraphQL API).
  • Queries.graphql — ملف يحتوي على استعلاماتك.

مثال لمحتوى Queries.graphql:

query GetCountries {
  countries {
    code
    name
    capital
    currency
  }
}

الآن أضف Build Phase لتوليد الكود. في Xcode: Target → Build Phases → + → New Run Script Phase. الصق السكريبت التالي:

cd "${SRCROOT}/${TARGET_NAME}"
./Pods/Apollo/scripts/run-bundled-codegen.sh codegen:generate --target=swift --includes=./**/*.graphql --localSchemaFile=./schema.graphqls ./GraphQL/API.swift

ملاحظة: في الإصدارات الحديثة من Apollo iOS، يُستخدم apollo-ios-cli. نوصي بالاطلاع على الوثائق الرسمية للحصول على أحدث التعليمات.

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

تهيئة عميل Apollo

لننشئ مديرًا للعمل مع Apollo. افتح ملف NetworkManager.swift:

import Foundation
import Apollo

class NetworkManager {
    static let shared = NetworkManager()
    
    private(set) lazy var apollo: ApolloClient = {
        let url = URL(string: "https://countries.trevorblades.com/")!
        return ApolloClient(url: url)
    }()
}

تنفيذ الاستعلام

الآن لننفذ استعلام GetCountries في ViewController الخاص بنا:

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        fetchCountries()
    }
    
    private func fetchCountries() {
        NetworkManager.shared.apollo.fetch(query: GetCountriesQuery()) { result in
            switch result {
            case .success(let graphQLResult):
                if let countries = graphQLResult.data?.countries {
                    for country in countries {
                        print("\(country.name) - \(country.capital ?? "N/A")")
                    }
                }
```                

المدونات

توصيات الكتب