مقدمة في GraphQL و Swift
GraphQL هي لغة استعلام حديثة لواجهات برمجة التطبيقات (API)، طورتها Facebook. على عكس REST، حيث تحصل على بنية بيانات ثابتة، تسمح GraphQL للعميل (تطبيقك بلغة Swift) بطلب الحقول التي يحتاجها فقط. هذا مهم بشكل خاص لمطوري التطبيقات المحمولة الذين يعملون مع iOS و macOS: بيانات أقل يعني حركة مرور أقل، تحميل أسرع، وتجربة مستخدم أفضل.
في هذا الدليل التعليمي، سنشرح كيفية ربط GraphQL API بمشروع Swift الخاص بك، وتنفيذ الاستعلامات والتحويرات الأساسية. سنستخدم العميل الرسمي Apollo iOS - المكتبة الأكثر شيوعًا والمدعومة للعمل مع GraphQL في نظام Apple البيئي.
بنهاية المقال، ستكون قادرًا على:
- إعداد Apollo iOS في مشروع Xcode
- كتابة وتنفيذ استعلام GraphQL (Query)
- إرسال تحوير (Mutation) لتعديل البيانات
- معالجة الردود والأخطاء
1. إعداد المشروع وتثبيت Apollo iOS
1.1. إنشاء مشروع جديد
افتح Xcode وأنشئ مشروعًا جديدًا (تطبيق iOS أو تطبيق macOS). اختر لغة Swift وواجهة SwiftUI أو UIKit - لا يهم، لأن العمل مع الشبكة لا يعتمد على إطار عمل واجهة المستخدم.
1.2. التثبيت عبر Swift Package Manager
يمكن ربط Apollo iOS بسهولة عبر SPM. انتقل إلى File → Add Packages... وألصق الرابط:
https://github.com/apollographql/apollo-ios.gitاختر أحدث إصدار ثابت (في وقت الكتابة - 1.15.0) وأضف الحزمة إلى هدفك.
قم أيضًا بتثبيت Apollo Code Generation CLI - أداة لتوليد أنواع Swift من مخطط GraphQL. أسهل طريقة هي تثبيته عبر Homebrew:
brew install apollo-ios-cliإذا لم يكن Homebrew مثبتًا، يمكنك استخدام npm:
npm install -g apollo-ios-cli1.3. تهيئة الإعدادات
في الطرفية، من جذر مشروعك، نفذ:
apollo-ios-cli init --module-name YourAppName --schema-namespace GraphQLسينشئ هذا الأمر ملف apollo-codegen-config.json ومجلد GraphQL، حيث سيتم تخزين ملفات .graphql الخاصة بك.
الآن أضف مخطط الخادم إلى المشروع. إذا كان الخادم يوفر schema.json أو schema.graphqls، فانسخه إلى مجلد GraphQL. إذا لم يكن كذلك، يمكنك استخدام الأمر المدمج للتحميل:
apollo-ios-cli fetch-schema --endpoint=https://your-graphql-endpoint.com/graphql2. كتابة أول استعلام GraphQL (Query)
2.1. إنشاء ملف .graphql
في مجلد GraphQL، أنشئ ملفًا باسم Queries.graphql واكتب استعلامًا بسيطًا. لنفترض أن لدينا API لجلب قائمة المستخدمين:
query GetUsers { users { id name email }}2.2. توليد كود Swift
قم بتشغيل توليد الكود من الطرفية:
apollo-ios-cli generateبعد التوليد الناجح، في مجلد Sources/API (أو في المجلد الذي حددته)، سيظهر ملف API.swift مع أنواع GetUsersQuery و GetUsersQuery.Data وما إلى ذلك.
2.3. تنفيذ الاستعلام من Swift
الآن لننشئ مثيلًا من عميل Apollo وننفذ الاستعلام. في ملف ContentView.swift (أو أي ملف آخر) اكتب:
import Apolloimport SwiftUI
class NetworkManager { static let shared = NetworkManager() private(set) lazy var apollo = ApolloClient(url: URL(string: "https://your-graphql-endpoint.com/graphql")!)}
struct ContentView: View { @State private var users: [GetUsersQuery.Data.User] = [] var body: some View { List(users, id: \\.id) { user in VStack(alignment: .leading) { Text(user.name)