Trabalhando com bancos de dados em Swift: PostgreSQL e MongoDB

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Bancos de Dados no Ecossistema Swift



O Swift há muito tempo foi além do simples desenvolvimento de aplicativos móveis. Com o surgimento de frameworks server-side como Vapor e Perfect, a linguagem se tornou uma ferramenta completa para a construção de backends. No entanto, trabalhar com bancos de dados em Swift tem suas particularidades. Diferente de Python ou JavaScript, não há drivers nativos aqui — tudo é feito através de pacotes de terceiros.



Neste artigo, vamos detalhar como se conectar a dois SGBDs populares: o relacional PostgreSQL e o orientado a documentos MongoDB. Você aprenderá quais bibliotecas usar, como configurar a conexão e como realizar operações CRUD básicas. Os exemplos são voltados para iOS/macOS, mas o código também funcionará em um ambiente servidor.



PostgreSQL em Swift: Abordagem Clássica com Vapor e Fluent



Escolhendo uma Biblioteca

Para trabalhar com PostgreSQL em Swift, o padrão de facto é o Fluent — um ORM do framework Vapor. O Fluent suporta PostgreSQL, MySQL, SQLite e MongoDB (através de um driver separado). Se você precisar trabalhar sem o Vapor, use o PostgresClientKit — um driver de baixo nível.



Configuração da Conexão

Adicione a dependência ao Package.swift:

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


Configuração básica no configure.swift:

import Fluentimport FluentPostgresDriverimport Vapor

public func configure(_ app: Application) throws { app.databases.use(.postgres( hostname: "localhost", port: 5432, username: "swift_user", password: "secret", database: "swift_db" ), as: .psql) // Adicionar migrações app.migrations.add(CreateUser())}


Operações CRUD Usando o Modelo User como Exemplo

Vamos criar um modelo e uma migração:

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    }}

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() }}


Exemplo de consulta em um controller:

// Criar um usuáriolet user = User(name: "Alexey", email: "alex@example.com")try await user.save(on: req.db)

// Buscar todos os usuárioslet users = try await User.query(on: req.db).all()

// Filtrar por emailet filtered = try await User.query(on: req.db) .filter(\\.$email == "alex@example.com") .first()


Importante: O Fluent usa assincronia via EventLoopFuture ou async/await (a partir do Vapor 4.60+). Certifique-se de que seu ambiente suporta Swift 5.5+.



MongoDB em Swift: Flexibilidade de Documentos com MongoKitten



Escolhendo um Driver

Para MongoDB, a biblioteca principal é o MongoKitten. Ela suporta todas as versões modernas do MongoDB, incluindo o Atlas (versão em nuvem). Uma alternativa é o MongoSwift da MongoDB Inc., mas o MongoKitten é considerado mais "Swifty" em estilo.



Conectando ao Banco de Dados

Adicione ao Package.swift:

.package(url: "https://github.com/OpenKitten/MongoKitten.git", from: "7.0.0")


Exemplo de conexão (para iOS/macOS):

Blogs

Book Recommendations