Einleitung: Warum Swift für REST-APIs?
Swift ist nicht nur eine Sprache für mobile Anwendungen. Dank Frameworks wie Vapor und Kitura können Sie vollwertige REST-APIs für die Serverseite erstellen. Dies ist besonders nützlich, wenn Ihre iOS-App bereits Swift verwendet: Sie können sowohl Client als auch Server in derselben Sprache schreiben, was die Entwicklungszeit verkürzt und die Code-Wartung vereinfacht.
In diesem Artikel erstellen wir eine einfache REST-API in Swift mit dem Vapor-Framework – der beliebtesten Lösung für die serverseitige Entwicklung in Swift. Wir werden den Server einrichten, Routen für CRUD-Operationen hinzufügen und ihn testen. Der gesamte Vorgang dauert nicht länger als 30 Minuten.
Voraussetzungen: macOS oder Linux, installiertes Swift 5.8+ (oder neuer), grundlegendes Verständnis von HTTP und JSON.
Schritt 1: Installieren und Einrichten eines Vapor-Projekts
Vapor bietet ein praktisches CLI-Tool für einen schnellen Start. Installieren Sie es über Homebrew:
brew install vaporErstellen Sie dann ein neues Projekt:
vapor new MyAPI --template=apicd MyAPIDas Flag --template=api erstellt ein Grundgerüst mit einer minimalen Struktur für eine REST-API. Nach der Erstellung des Projekts öffnen Sie es in Xcode (oder einem beliebigen Editor):
open Package.swiftDie Projektstruktur umfasst:
Sources/App/— Hauptlogik (Routen, Controller, Modelle).Sources/App/routes.swift— Routenregistrierung.Sources/App/configure.swift— Anwendungskonfiguration.Package.swift— Abhängigkeiten (Vapor ist bereits enthalten).
Wenn Sie Xcode verwenden, werden Abhängigkeiten automatisch heruntergeladen. Führen Sie im Terminal vapor build aus, um das Projekt zu erstellen.
Schritt 2: Erstellen des Datenmodells und der Datenbank
Für eine REST-API benötigen wir ein Modell. Erstellen wir ein einfaches Task-Modell mit den Feldern: id, title, completed. In Vapor erben Modelle normalerweise von Model (Fluent ORM).
Erstellen Sie eine Datei Sources/App/Models/Task.swift:
import Fluentimport Vapor
final class Task: Model, Content { static let schema = "tasks"
@ID(key: .id) var id: UUID?
@Field(key: "title") var title: String
@Field(key: "completed") var completed: Bool
init() {}
init(id: UUID? = nil, title: String, completed: Bool = false) { self.id = id self.title = title self.completed = completed }}Jetzt erstellen wir eine Migration für die Datenbanktabelle. Erstellen Sie eine Datei Sources/App/Migrations/CreateTask.swift:
import Fluent
struct CreateTask: Migration { func prepare(on database: Database) -> EventLoopFuture<Void> { database.schema("tasks") .id() .field("title", .string, .required) .field("completed", .bool, .required) .create() }
func revert(on database: Database) -> EventLoopFuture<Void> { database.schema("tasks").delete() }}Fügen Sie die Migration in configure.swift hinzu:
app.migrations.add(CreateTask())Standardmäßig verwendet Vapor SQLite (eine Datei im Projektordner). Wenn Sie PostgreSQL oder MySQL möchten, ändern Sie die Einstellungen in configure.swift, aber für einen schnellen Start funktioniert SQLite perfekt.
Schritt 3: Registrieren der REST-API-Routen
Jetzt erstellen wir einen Controller zur Verarbeitung der Anfragen. Erstellen Sie eine Datei Sources/App/Controllers/TaskController.swift:
import Vaporimport Fluent
struct TaskController: RouteCollection { func boot(routes: RoutesBuilder) throws { let tasks = routes.grouped("tasks")
tasks.get(use: index) // GET /tasks tasks.post(use: create) // POST /tasks tasks.grou