Trabajo con bases de datos en Swift: PostgreSQL y MongoDB para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿Por qué un desarrollador de Swift necesita bases de datos?

Las aplicaciones modernas de iOS y macOS rara vez prescinden del almacenamiento de datos. Ya sea una lista de tareas, un perfil de usuario o un catálogo de productos: los datos deben guardarse y recuperarse en algún lugar. Swift, como lenguaje principal del ecosistema Apple, proporciona herramientas potentes para trabajar con bases de datos. En este artículo, veremos cómo un desarrollador principiante puede conectar y realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) con dos sistemas populares: el relacional PostgreSQL y el orientado a documentos MongoDB.

Usaremos el framework del lado del servidor Vapor (basado en SwiftNIO) para trabajar con PostgreSQL, y el popular controlador MongoKitten para MongoDB. Ambas opciones son excelentes para el desarrollo backend en Swift. Si estás empezando, no te preocupes: todo el código será simple y estará bien explicado.



1. PostgreSQL y Swift: La base de datos relacional clásica

PostgreSQL es una potente base de datos relacional con soporte SQL. Para Swift, la mejor forma de interactuar es el framework Vapor y su ORM Fluent. Fluent te permite trabajar con tablas como si fueran estructuras regulares de Swift.



1.1. Configuración de un proyecto Vapor

Primero, instala Vapor Toolbox y crea un proyecto:

brew install vaporvapor new MyAppcd MyApp

Añade la dependencia para PostgreSQL en Package.swift:

dependencies: [    .package(url: "https://github.com/vapor/vapor.git", from: "4.0.0"),    .package(url: "https://github.com/vapor/fluent.git", from: "4.0.0"),    .package(url: "https://github.com/vapor/fluent-postgres-driver.git", from: "2.0.0")]


1.2. Modelo y Migración

Vamos a crear un modelo simple User:

import Fluentimport Vapor

final class User: Model, Content { static let schema = "users" @ID(key: .id) var id: UUID? @Field(key: "name") var name: String @Field(key: "email") var email: String init() { } init(id: UUID? = nil, name: String, email: String) { self.id = id self.name = name self.email = email }}

Ahora la migración para crear la tabla:

struct CreateUser: Migration {    func prepare(on database: Database) -> EventLoopFuture<Void> {        database.schema("users")            .id()            .field("name", .string, .required)            .field("email", .string, .required)            .create()    }        func revert(on database: Database) -> EventLoopFuture<Void> {        database.schema("users").delete()    }}

Registra la migración en configure.swift:

app.migrations.add(CreateUser())


1.3. Operaciones CRUD

Crear:

let user = User(name: "Ivan", email: "ivan@example.com")try await user.save(on: database)

Leer:

let users = try await User.query(on: database).all()let user = try await User.find(id, on: database)

Actualizar:

guard let user = try await User.find(id, on: database) else { return }user.name = "New name"try await user.update(on: database)

Eliminar:

guard let user = try await User.find(id, on: database) else { return }try await user.delete(on: database)

Fluent genera automáticamente consultas SQL, lo que simplifica enormemente la vida a los principiantes.



2. MongoDB y Swift: La flexibilidad de NoSQL

MongoDB es una base de datos documental donde los datos se almacenan en formato BSON (JSON binario). Para Swift, usamos la librería MongoKitten, una madura y activamente soportada.

Blogs

Book Recommendations