مقدمة: قواعد البيانات في نظام Swift البيئي
لقد تجاوزت Swift منذ فترة طويلة مجرد تطوير تطبيقات الهاتف المحمول. مع ظهور أطر العمل الخادمية مثل Vapor و Perfect، أصبحت اللغة أداة كاملة لبناء الواجهات الخلفية. ومع ذلك، فإن العمل مع قواعد البيانات في Swift له خصائصه الخاصة. على عكس Python أو JavaScript، لا توجد برامج تشغيل مدمجة هنا - يتم حل كل شيء من خلال الحزم الخارجية.
في هذه المقالة، سنشرح كيفية الاتصال بنظامي إدارة قواعد بيانات شائعين: PostgreSQL العلائقية و MongoDB الموجهة للمستندات. ستتعرف على المكتبات التي يجب استخدامها، وكيفية إعداد الاتصال وتنفيذ عمليات CRUD الأساسية. الأمثلة موجهة لنظامي iOS/macOS، لكن الكود سيعمل أيضًا في البيئة الخادمية.
PostgreSQL في Swift: الكلاسيكية عبر Vapor و Fluent
اختيار المكتبة
للعمل مع PostgreSQL في Swift، المعيار الفعلي هو Fluent - ORM من إطار عمل Vapor. يدعم Fluent PostgreSQL و MySQL و SQLite و MongoDB (عبر برنامج تشغيل منفصل). إذا كنت بحاجة إلى العمل بدون Vapor، استخدم PostgresClientKit - برنامج تشغيل منخفض المستوى.
إعداد الاتصال
أضف التبعية في Package.swift:
.package(url: "https://github.com/vapor/fluent-postgres-driver.git", from: "2.0.0")التكوين الأساسي في configure.swift:
import Fluentimport FluentPostgresDriverimport Vapor
public func configure(_ app: Application) throws { app.databases.use(.postgres( hostname: "localhost", port: 5432, username: "swift_user", password: "secret", database: "swift_db" ), as: .psql) // إضافة الترحيلات app.migrations.add(CreateUser())}عمليات CRUD على مثال نموذج User
لنقم بإنشاء نموذج وترحيل:
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 }}
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() }}مثال على استعلام في المتحكم:
// إنشاء مستخدمlet user = User(name: "Алексей", email: "alex@example.com")try await user.save(on: req.db)
// البحث عن جميع المستخدمينlet users = try await User.query(on: req.db).all()
// التصفية حسب البريد الإلكترونيlet filtered = try await User.query(on: req.db) .filter(\\.$email == "alex@example.com") .first()هام: يستخدم Fluent التزامن غير المتزامن عبر EventLoopFuture أو async/await (بدءًا من Vapor 4.60+). تأكد من أن بيئتك تدعم Swift 5.5+.
MongoDB في Swift: مرونة المستندات مع MongoKitten
اختيار برنامج التشغيل
بالنسبة لـ MongoDB، المكتبة الرئيسية هي MongoKitten. وهي تدعم جميع الإصدارات الحديثة من MongoDB، بما في ذلك Atlas (الإصدار السحابي). البديل هو MongoSwift من MongoDB Inc.، لكن MongoKitten تعتبر أكثر "سويفتية" من حيث الأسلوب.
الاتصال بقاعدة البيانات
أضف إلى Package.swift:
.package(url: "https://github.com/OpenKitten/MongoKitten.git", from: "7.0.0")مثال على الاتصال (لنظامي iOS/macOS):