Swift et PostgreSQL : le duo idéal pour le backend en 2025

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Swift et PostgreSQL : pourquoi cette combinaison explose les cerveaux

\n\n

Quand on parle de « Swift côté serveur », la plupart des développeurs imaginent Vapor, Perfect ou Kitura. Et quand il s'agit de bases de données, on pense habituellement à MySQL ou SQLite. Mais soyons honnêtes : si vous construisez un backend sérieux en Swift, vous avez besoin de PostgreSQL. Pourquoi ? Parce que ce n'est pas juste une base de données — c'est un couteau suisse pour travailler avec les données, qui s'accorde parfaitement avec la puissance de Swift.

\n\n

Dans cet article, nous allons voir comment faire cohabiter Swift et PostgreSQL pour que votre code vole, que la base ne plante pas et que vos collègues soient jaloux. Rien de superflu — seulement de la pratique, du code et des cas réels.

\n\n

Pourquoi PostgreSQL plutôt que MySQL ?

\n\n

Mettons les choses au clair tout de suite. PostgreSQL est un SGBD objet-relationnel qui sait faire ce dont MySQL ne peut même pas rêver :

\n\n
    \n
  • JSON et JSONB natifs — stockez des structures complexes directement dans les tables
  • \n
  • Tableaux — sans bricolage ni tables supplémentaires
  • \n
  • Requêtes parallèles — utilisez tous les cœurs du serveur
  • \n
  • Extensibilité — PostGIS, TimescaleDB, pgvector pour l'IA
  • \n
\n\n

Et surtout, PostgreSQL s'entend parfaitement avec SwiftNIO (le moteur asynchrone sur lequel Vapor est construit). Cela signifie que vos requêtes à la base ne bloqueront pas le fil d'exécution.

\n\n

Installation et configuration du pilote PostgreSQL pour Swift

\n\n

Commençons par l'essentiel : comment connecter PostgreSQL à votre projet Swift. Nous utiliserons vapor/fluent-postgres-driver — le pilote le plus populaire et le plus stable.

\n\n

Étape 1 : Ajouter les dépendances

\n\n

Ouvrez Package.swift et ajoutez :

\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

Étape 2 : Configurer la connexion à la base

\n\n

Dans le fichier configure.swift, ajoutez la configuration :

\n\n
import Vapor\nimport Fluent\nimport FluentPostgresDriver\n\npublic func configure(_ app: Application) throws {\n    // Utilisez les variables d'environnement pour la sécurité\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    // Enregistrer les modèles\n    app.migrations.add(CreateUser())\n    \n    // Automigration au démarrage\n    try app.autoMigrate().wait()\n}
\n\n

Conseil important : ne codez jamais en dur les mots de passe dans le code. Utilisez des variables d'environnement ou des fichiers .env avec Vapor's Environment.

\n\n

Créer un modèle de données en Swift

\n\n

Maintenant, la partie la plus intéressante — définissons un modèle d'utilisateur. En Swift avec Fluent, cela se fait de manière élégante et concise :

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

Blogs

Book Recommendations