Como escrever uma API REST em Swift em 30 minutos: guia prático

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
```html

Introdução: Swift não é apenas para aplicativos móveis

Muitos desenvolvedores estão acostumados a associar Swift exclusivamente com iOS e macOS. No entanto, esta linguagem há muito ultrapassou os limites do ecossistema Apple. Com o surgimento de frameworks server-side, como Vapor e Kitura, o Swift se tornou uma ferramenta completa para a criação de backend. Neste artigo, em 30 minutos, escreveremos uma API REST completa em Swift usando o framework Vapor. Você aprenderá como configurar o projeto, criar endpoints, conectar um banco de dados e tratar erros. Pronto? Vamos lá!

Passo 1: Instalação e configuração do projeto

Para começar, certifique-se de ter o Swift 5.5 ou superior instalado. Você pode verificar a versão com o comando:

swift --version

Em seguida, instale o Vapor Toolbox — um utilitário para gerenciar projetos:

brew install vapor

Agora vamos criar um novo projeto:

vapor new MyAPI --template=api

Este comando criará uma estrutura de pastas com um template de API pronto. Navegue até a pasta do projeto e inicie a compilação:

cd MyAPI
vapor build

Se a compilação for bem-sucedida, inicie o servidor:

vapor run

Por padrão, o servidor estará disponível em http://127.0.0.1:8080. Abra o navegador e acesse este endereço — você deverá ver uma mensagem de boas-vindas.

Estrutura do projeto Vapor

  • Sources/App — diretório principal com o código da aplicação
  • Sources/App/Controllers — controllers para processar requisições
  • Sources/App/Models — modelos de dados
  • Sources/App/routes.swift — arquivo para registrar as rotas
  • configure.swift — configuração da aplicação e do banco de dados

Passo 2: Criando o modelo de dados e o banco de dados

Como exemplo, vamos criar uma API simples para gerenciar uma lista de tarefas (Todo). Começaremos com o modelo de dados. Crie o arquivo Todo.swift na pasta Sources/App/Models:

import Fluent
import Vapor

final class Todo: Model, Content {
    static let schema = "todos"
    
    @ID(key: .id)
    var id: UUID?
    
    @Field(key: "title")
    var title: String
    
    @Field(key: "is_completed")
    var isCompleted: Bool
    
    init() {}
    
    init(id: UUID? = nil, title: String, isCompleted: Bool = false) {
        self.id = id
        self.title = title
        self.isCompleted = isCompleted
    }
}

Agora vamos criar a migração para a tabela. No arquivo Sources/App/Migrations/CreateTodo.swift:

import Fluent

struct CreateTodo: Migration {
    func prepare(on database: Database) -> EventLoopFuture<Void> {
        database.schema("todos")
            .id()
            .field("title", .string, .required)
            .field("is_completed", .bool, .required)
            .create()
    }
    
    func revert(on database: Database) -> EventLoopFuture<Void> {
        database.schema("todos").delete()
    }
}

Não se esqueça de registrar a migração no configure.swift:

app.migrations.add(CreateTodo())

Para simplificar, usaremos SQLite (banco de dados embutido). Adicione no configure.swift:

app.databases.use(.sqlite(.file("db.sqlite")), as: .sqlite)

Passo 3: Criando os endpoints da REST API

Agora a parte mais interessante — a implementação das operações CRUD. Crie o controller TodoController.swift na pasta Sources/App/Controllers:

import Vapor

struct TodoController: RouteCollection {
    func boot(routes: RoutesBuilder) throws {
        let todos = routes.grouped("api", "todos")
        todos.get(use: index)
        todos.post(use: create)
        todos.group(":todoID") { todo in
            todo.get(use: show)
```                

Blogs

Book Recommendations