Swift و PostgreSQL: المزيج المثالي للـ backend في 2025

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

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

ابدأ الدورة

Swift و PostgreSQL: لماذا هذا المزيج يذهل العقول

\n\n

عندما نقول "Swift من جانب الخادم"، يتخيل معظم المطورين Vapor أو Perfect أو Kitura. وعندما يتعلق الأمر بقواعد البيانات، يتبادر إلى الذهن MySQL أو SQLite المعتادان. لكن لنكن صادقين: إذا كنت تبني backend جادًا باستخدام Swift، فأنت بحاجة إلى PostgreSQL. لماذا؟ لأنه ليس مجرد قاعدة بيانات - بل هو سكين سويسري للعمل مع البيانات، يتناسب بشكل مثالي مع قوة Swift.

\n\n

في هذه المقالة، سنشرح كيفية جعل Swift و PostgreSQL يعملان معًا بحيث يطير كودك، ولا تتعطل قاعدة البيانات، ويحسدك زملاؤك. لا ماء - فقط ممارسة، كود، وحالات واقعية.

\n\n

لماذا PostgreSQL وليس MySQL؟

\n\n

دعنا نضع النقاط على الحروف فورًا. PostgreSQL هو نظام إدارة قواعد بيانات كائني-علائقي يمكنه فعل ما لا يحلم به MySQL حتى:

\n\n
    \n
  • JSON و JSONB الأصليان - تخزين الهياكل المعقدة مباشرة في الجداول
  • \n
  • المصفوفات - بدون حلول بديلة أو جداول إضافية
  • \n
  • الاستعلامات المتوازية - استخدام جميع أنوية الخادم
  • \n
  • قابلية التوسع - PostGIS, TimescaleDB, pgvector للذكاء الاصطناعي
  • \n
\n\n

والأهم من ذلك، أن PostgreSQL يتوافق بشكل مثالي مع SwiftNIO (المحرك غير المتزامن الذي بني عليه Vapor). هذا يعني أن استعلاماتك لقاعدة البيانات لن تمنع تدفق التنفيذ.

\n\n

تثبيت وتكوين محرك PostgreSQL لـ Swift

\n\n

لنبدأ بالأهم - كيفية ربط PostgreSQL بمشروع Swift الخاص بك. سنستخدم vapor/fluent-postgres-driver - المحرك الأكثر شيوعًا واستقرارًا.

\n\n

الخطوة 1: إضافة التبعيات

\n\n

افتح Package.swift وأضف:

\n\n
// swift-tools-version:5.9\nimport PackageDescription\n\nlet package = Package(\n    name: "MySwiftBackend",\n    platforms: [\n        .macOS(.v13)\n    ],\n    dependencies: [\n        .package(url: "https://github.com/vapor/vapor.git", from: "4.90.0"),\n        .package(url: "https://github.com/vapor/fluent.git", from: "4.10.0"),\n        .package(url: "https://github.com/vapor/fluent-postgres-driver.git", from: "2.8.0")\n    ],\n    targets: [\n        .target(\n            name: "App",\n            dependencies: [\n                .product(name: "Vapor", package: "vapor"),\n                .product(name: "Fluent", package: "fluent"),\n                .product(name: "FluentPostgresDriver", package: "fluent-postgres-driver")\n            ]\n        )\n    ]\n)
\n\n

الخطوة 2: تكوين الاتصال بقاعدة البيانات

\n\n

في ملف configure.swift أضف التكوين:

\n\n
import Vapor\nimport Fluent\nimport FluentPostgresDriver\n\npublic func configure(_ app: Application) throws {\n    // استخدام متغيرات البيئة للأمان\n    let hostname = Environment.get("DB_HOST") ?? "localhost"\n    let port = Environment.get("DB_PORT").flatMap(Int.init) ?? 5432\n    let username = Environment.get("DB_USERNAME") ?? "swift_user"\n    let password = Environment.get("DB_PASSWORD") ?? "swift_pass"\n    let database = Environment.get("DB_NAME") ?? "swift_backend"\n\n    app.databases.use(\n        .postgres(\n            hostname: hostname,\n            port: port,\n            username: username,\n            password: password,\n            database: database\n        ),\n        as: .psql\n    )\n    \n    // تسجيل النماذج\n    app.migrations.add(CreateUser())\n    \n    // الترحيل التلقائي عند البدء\n    try app.autoMigrate().wait()\n}
\n\n

نصيحة مهمة: لا تقم أبدًا بتضمين كلمات المرور في الكود. استخدم متغيرات البيئة أو ملفات .env باستخدام Vapor's Environment.

\n\n

إنشاء نموذج بيانات في Swift

\n\n

الآن الجزء الممتع - سنحدد نموذج المستخدم. في Swift مع Fluent، يتم ذلك بأناقة وإيجاز:

\n\n
import Fluent\nimport Vapor\n\nfinal                

المدونات

توصيات الكتب