Introdução: Por que Swift e bancos de dados?
\nSwift não é apenas uma linguagem para criar aplicativos móveis. Graças aos frameworks Vapor e SwiftNIO, os desenvolvedores podem criar aplicações de servidor completas que interagem com bancos de dados relacionais e orientados a documentos. Neste artigo, vamos explicar como conectar-se ao PostgreSQL e ao MongoDB a partir do Swift e mostrar exemplos de código simples para iniciantes.
\nO artigo é voltado para quem já conhece os fundamentos do Swift, mas está começando a aprender a trabalhar com bancos de dados. Abordaremos duas abordagens populares: SQL clássico (PostgreSQL) e NoSQL flexível (MongoDB).
\n\n1. PostgreSQL em Swift: Dados estruturados
\nPostgreSQL é um poderoso banco de dados relacional de código aberto. Para trabalhar com ele em Swift, usaremos o pacote PostgresKit, que faz parte do ecossistema Vapor.
1.1 Instalação e configuração
\nAdicione a dependência no arquivo 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 Conexão ao banco de dados
\nCrie uma instância de configuração e conecte-se ao 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("Conexão com PostgreSQL estabelecida!")\n\n1.3 Executando consultas SQL
\nAgora vamos executar uma consulta simples para criar uma tabela e inserir dados:
\n// Criando a tabela de usuários\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// Inserindo dados\ntry connection.query("""\n INSERT INTO users (name, email) \n VALUES ('Alexey', 'alex@example.com')\n""").wait()\n\n// Lendo dados\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("Usuário: \\(name) (\\(email)), ID: \\(id)")\n}\n\n2. MongoDB em Swift: Documentos flexíveis
\nMongoDB é um banco de dados NoSQL que armazena dados em formato de documentos semelhantes a JSON. Para Swift, existem vários drivers, mas usaremos o oficial MongoDB Swift Driver.
\n\n2.1 Instalação do driver
\nAdicione o pacote no 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 Conexão ao MongoDB
\nCrie um cliente e selecione um banco de dados:
\nimport MongoSwift\n\nlet client = try MongoClient("mongodb://localhost:27017")\ndefer { try? client.syncClose() }\n\nlet database = client.db("swift_m