Introduction : Pourquoi Swift et les bases de données ?
\nSwift n'est pas seulement un langage pour créer des applications mobiles. Grâce aux frameworks Vapor et SwiftNIO, les développeurs peuvent créer des applications serveur complètes qui interagissent avec des bases de données relationnelles et orientées documents. Dans cet article, nous allons voir comment se connecter à PostgreSQL et MongoDB depuis Swift, et montrer des exemples de code simples pour les débutants.
\nCet article s'adresse à ceux qui connaissent déjà les bases de Swift, mais qui commencent tout juste à apprendre le travail avec les bases de données. Nous aborderons deux approches populaires : le SQL classique (PostgreSQL) et le NoSQL flexible (MongoDB).
\n\n1. PostgreSQL en Swift : Données structurées
\nPostgreSQL est une base de données relationnelle puissante et open source. Pour travailler avec elle en Swift, nous utiliserons le paquet PostgresKit, qui fait partie de l'écosystème Vapor.
1.1 Installation et configuration
\nAjoutez la dépendance dans le fichier 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 Connexion à la base de données
\nCréez une instance de configuration et connectez-vous au serveur 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("Connexion à PostgreSQL établie !")\n\n1.3 Exécution de requêtes SQL
\nExécutons maintenant une requête simple pour créer une table et insérer des données :
\n// Création de la table des utilisateurs\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// Insertion de données\ntry connection.query("""\n INSERT INTO users (name, email) \n VALUES ('Alexeï', 'alex@example.com')\n""").wait()\n\n// Lecture des données\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("Utilisateur : \\(name) (\\(email)), ID : \\(id)")\n}\n\n2. MongoDB en Swift : Documents flexibles
\nMongoDB est une base de données NoSQL qui stocke les données dans un format de documents de type JSON. Pour Swift, il existe plusieurs pilotes, mais nous utilisons le pilote officiel MongoDB Swift Driver.
\n\n2.1 Installation du pilote
\nAjoutez le paquet dans 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 Connexion à MongoDB
\nCréez un client et sélectionnez une base de données :
\nimport MongoSwift\n\nlet client = try MongoClient("mongodb://localhost:27017")\ndefer { try? client.syncClose() }\n\nlet database = client.db("swift_m