العمل مع قواعد البيانات في Swift: PostgreSQL و MongoDB للمبتدئين

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

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

ابدأ الدورة

مقدمة: لماذا يحتاج مطور Swift إلى قواعد البيانات؟

نادرًا ما تستغني التطبيقات الحديثة لنظامي iOS و macOS عن تخزين البيانات. سواء كانت قائمة مهام، أو ملف تعريف مستخدم، أو كتالوج منتجات — يجب تخزين البيانات واسترجاعها في مكان ما. توفر لغة Swift، باعتبارها اللغة الرئيسية للنظام البيئي لشركة Apple، أدوات قوية للعمل مع قواعد البيانات (DB). في هذه المقالة، سنشرح كيف يمكن للمطور المبتدئ الاتصال وتنفيذ عمليات CRUD (الإنشاء، القراءة، التحديث، الحذف) باستخدام نظامين شائعين: قاعدة البيانات العلائقية PostgreSQL وقاعدة البيانات الموجهة للوثائق MongoDB.

سنستخدم إطار العمل الخادمي Vapor (القائم على SwiftNIO) للعمل مع PostgreSQL، والمكتبة الشائعة MongoKitten لقاعدة بيانات MongoDB. كلا الخيارين ممتازان للواجهة الخلفية (Backend) بلغة Swift. إذا كنت مبتدئًا — فلا تقلق: كل الكود سيكون بسيطًا ومرفقًا بالشروحات.



1. PostgreSQL و Swift: كلاسيكيات قواعد البيانات العلائقية

PostgreSQL هي قاعدة بيانات علائقية قوية تدعم SQL. أفضل طريقة للتفاعل معها في Swift هي استخدام إطار العمل Vapor و ORM الخاص به Fluent. يتيح Fluent العمل مع الجداول كما لو كانت هياكل (Structs) عادية في Swift.



1.1. إعداد مشروع Vapor

أولاً، قم بتثبيت Vapor Toolbox وأنشئ مشروعًا:

brew install vaporvapor new MyAppcd MyApp

أضف تبعية PostgreSQL في ملف Package.swift:

dependencies: [    .package(url: "https://github.com/vapor/vapor.git", from: "4.0.0"),    .package(url: "https://github.com/vapor/fluent.git", from: "4.0.0"),    .package(url: "https://github.com/vapor/fluent-postgres-driver.git", from: "2.0.0")]


1.2. النموذج (Model) والترحيل (Migration)

لنقم بإنشاء نموذج بسيط User:

import Fluentimport Vapor

final class User: Model, Content { static let schema = "users" @ID(key: .id) var id: UUID? @Field(key: "name") var name: String @Field(key: "email") var email: String init() { } init(id: UUID? = nil, name: String, email: String) { self.id = id self.name = name self.email = email }}

الآن، الترحيل (Migration) لإنشاء الجدول:

struct CreateUser: Migration {    func prepare(on database: Database) -> EventLoopFuture<Void> {        database.schema("users")            .id()            .field("name", .string, .required)            .field("email", .string, .required)            .create()    }        func revert(on database: Database) -> EventLoopFuture<Void> {        database.schema("users").delete()    }}

قم بتسجيل الترحيل في ملف configure.swift:

app.migrations.add(CreateUser())


1.3. عمليات CRUD

إنشاء سجل (Create):

let user = User(name: "إيفان", email: "ivan@example.com")try await user.save(on: database)

القراءة (Read):

let users = try await User.query(on: database).all()let user = try await User.find(id, on: database)

التحديث (Update):

guard let user = try await User.find(id, on: database) else { return }user.name = "اسم جديد"try await user.update(on: database)

الحذف (Delete):

guard let user = try await User.find(id, on: database) else { return }try await user.delete(on: database)

يقوم Fluent تلقائيًا بتوليد استعلامات SQL، مما يبسط الحياة بشكل كبير للمبتدئين.



2. MongoDB و Swift: مرونة NoSQL

MongoDB هي قاعدة بيانات وثائقية، حيث يتم تخزين البيانات بتنسيق BSON (JSON ثنائي). بالنسبة لـ Swift، نستخدم المكتبة MongoKitten — وهي مكتبة ناضجة ومدعومة بنشاط.

المدونات

توصيات الكتب