مقدمة: لماذا Swift وقواعد البيانات؟
\nSwift ليست مجرد لغة لإنشاء تطبيقات الجوال. بفضل الأطر Vapor و SwiftNIO، يمكن للمطورين إنشاء تطبيقات خادم متكاملة تتفاعل مع قواعد البيانات العلائقية والموجهة للمستندات. في هذه المقالة، سنشرح كيفية الاتصال بـ PostgreSQL و MongoDB من Swift، وسنقدم أمثلة بسيطة من الكود للمبتدئين.
\nالمقالة موجهة لأولئك الذين هم على دراية بأساسيات Swift، ولكنهم بدأوا للتو في تعلم العمل مع قواعد البيانات. سننظر في نهجين شائعين: SQL الكلاسيكي (PostgreSQL) و NoSQL المرن (MongoDB).
\n\n1. PostgreSQL في Swift: البيانات المنظمة
\nPostgreSQL هي قاعدة بيانات علائقية قوية مفتوحة المصدر. للعمل معها في Swift، سنستخدم الحزمة PostgresKit، التي تعد جزءًا من نظام Vapor البيئي.
1.1 التثبيت والإعداد
\nأضف التبعية إلى ملف Package.swift:
// swift-tools-version:5.7\nimport PackageDescription\n\nlet package = Package(\n name: "MyApp",\n dependencies: [\n .package(url: "https://github.com/vapor/postgres-kit.git", from: "2.0.0")\n ],\n targets: [\n .executableTarget(\n name: "MyApp",\n dependencies: [\n .product(name: "PostgresKit", package: "postgres-kit")\n ]\n )\n ]\n)\n\n1.2 الاتصال بقاعدة البيانات
\nأنشئ مثيل تكوين واتصل بخادم PostgreSQL:
\nimport PostgresKit\n\nlet eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)\ndefer { try! eventLoopGroup.syncShutdown() }\n\nlet configuration = PostgresConfiguration(\n hostname: "localhost",\n port: 5432,\n username: "swift_user",\n password: "secret",\n database: "swift_db"\n)\n\nlet pool = EventLoopGroupConnectionPool(\n source: PostgresConnectionSource(configuration: configuration),\n on: eventLoopGroup\n)\ndefer { try! pool.syncShutdown() }\n\nlet connection = try pool.requestConnection().wait()\nprint("تم إنشاء الاتصال بـ PostgreSQL!")\n\n1.3 تنفيذ استعلامات SQL
\nالآن سنقوم بتنفيذ استعلام بسيط لإنشاء جدول وإدراج البيانات:
\n// إنشاء جدول المستخدمين\ntry connection.query("""\n CREATE TABLE IF NOT EXISTS users (\n id SERIAL PRIMARY KEY,\n name TEXT NOT NULL,\n email TEXT UNIQUE NOT NULL\n )\n""").wait()\n\n// إدراج البيانات\ntry connection.query("""\n INSERT INTO users (name, email) \n VALUES ('أليكسي', 'alex@example.com')\n""").wait()\n\n// قراءة البيانات\nlet rows = try connection.query("SELECT * FROM users").wait()\nfor row in rows {\n let id = try row.decode(Int.self, column: "id")\n let name = try row.decode(String.self, column: "name")\n let email = try row.decode(String.self, column: "email")\n print("المستخدم: \\(name) (\\(email)), المعرف: \\(id)")\n}\n\n2. MongoDB في Swift: المستندات المرنة
\nMongoDB هي قاعدة بيانات NoSQL تخزن البيانات بتنسيق مستندات تشبه JSON. يوجد العديد من المحركات لـ Swift، لكننا سنستخدم المحرك الرسمي MongoDB Swift Driver.
\n\n2.1 تثبيت المحرك
\nأضف الحزمة إلى Package.swift:
dependencies: [\n .package(url: "https://github.com/mongodb/mongo-swift-driver.git", from: "1.0.0")\n],\ntargets: [\n .executableTarget(\n name: "MyApp",\n dependencies: [\n .product(name: "MongoSwift", package: "mongo-swift-driver")\n ]\n )\n]\n\n2.2 الاتصال بـ MongoDB
\nأنشئ عميلاً واختر قاعدة البيانات:
\nimport MongoSwift\n\nlet client = try MongoClient("mongodb://localhost:27017")\ndefer { try? client.syncClose() }\n\nlet database = client.db("swift_m