Introducción: ¿Por qué Swift y bases de datos?
\nSwift no es solo un lenguaje para crear aplicaciones móviles. Gracias a los frameworks Vapor y SwiftNIO, los desarrolladores pueden crear aplicaciones de servidor completas que interactúan con bases de datos relacionales y orientadas a documentos. En este artículo, analizaremos cómo conectarse a PostgreSQL y MongoDB desde Swift, y mostraremos ejemplos de código simples para principiantes.
\nEl artículo está dirigido a quienes ya conocen los fundamentos de Swift, pero recién comienzan a aprender a trabajar con bases de datos. Cubriremos dos enfoques populares: SQL clásico (PostgreSQL) y NoSQL flexible (MongoDB).
\n\n1. PostgreSQL en Swift: Datos estructurados
\nPostgreSQL es una potente base de datos relacional de código abierto. Para trabajar con ella en Swift, usaremos el paquete PostgresKit, que forma parte del ecosistema Vapor.
1.1 Instalación y configuración
\nAgregue la dependencia en el archivo 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 Conexión a la base de datos
\nCree una instancia de configuración y conéctese al servidor 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("¡Conexión a PostgreSQL establecida!")\n\n1.3 Ejecución de consultas SQL
\nAhora ejecutemos una consulta simple para crear una tabla e insertar datos:
\n// Creamos la tabla de usuarios\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// Insertamos datos\ntry connection.query("""\n INSERT INTO users (name, email) \n VALUES ('Alexei', 'alex@example.com')\n""").wait()\n\n// Leemos datos\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("Usuario: \\(name) (\\(email)), ID: \\(id)")\n}\n\n2. MongoDB en Swift: Documentos flexibles
\nMongoDB es una base de datos NoSQL que almacena datos en formato de documentos similares a JSON. Para Swift existen varios controladores, pero usaremos el oficial MongoDB Swift Driver.
\n\n2.1 Instalación del controlador
\nAgregue el paquete en 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 Conexión a MongoDB
\nCree un cliente y seleccione una base de datos:
\nimport MongoSwift\n\nlet client = try MongoClient("mongodb://localhost:27017")\ndefer { try? client.syncClose() }\n\nlet database = client.db("swift_m