Wie man in 30 Minuten eine REST API in Swift schreibt: Praktische Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung: Swift – Nicht nur für mobile Apps

Viele Entwickler sind daran gewöhnt, Swift ausschließlich mit iOS und macOS zu assoziieren. Allerdings hat sich diese Sprache längst über das Apple-Ökosystem hinausbewegt. Mit dem Aufkommen von serverseitigen Frameworks wie Vapor und Kitura ist Swift zu einem vollwertigen Werkzeug für die Backend-Entwicklung geworden. In diesem Artikel werden wir in 30 Minuten eine vollständige REST-API in Swift mit dem Vapor-Framework schreiben. Sie lernen, wie Sie ein Projekt einrichten, Endpunkte erstellen, eine Datenbank verbinden und Fehler behandeln. Bereit? Los geht's!

Schritt 1: Installation und Einrichtung des Projekts

Stellen Sie zunächst sicher, dass Swift 5.5 oder neuer installiert ist. Sie können die Version mit dem Befehl überprüfen:

swift --version

Installieren Sie als nächstes Vapor Toolbox – ein Dienstprogramm zur Verwaltung von Projekten:

brew install vapor

Erstellen wir nun ein neues Projekt:

vapor new MyAPI --template=api

Dieser Befehl erstellt eine Ordnerstruktur mit einer fertigen API-Vorlage. Navigieren Sie zum Projektordner und führen Sie den Build aus:

cd MyAPI
vapor build

Wenn der Build erfolgreich ist, starten Sie den Server:

vapor run

Standardmäßig ist der Server unter http://127.0.0.1:8080 erreichbar. Öffnen Sie Ihren Browser und gehen Sie zu dieser Adresse – Sie sollten eine Begrüßungsnachricht sehen.

Vapor-Projektstruktur

  • Sources/App – das Hauptverzeichnis mit dem Anwendungscode
  • Sources/App/Controllers – Controller zur Bearbeitung von Anfragen
  • Sources/App/Models – Datenmodelle
  • Sources/App/routes.swift – Datei zum Registrieren von Routen
  • configure.swift – Konfiguration der Anwendung und Datenbank

Schritt 2: Erstellen des Datenmodells und der Datenbank

Für dieses Beispiel erstellen wir eine einfache API zur Verwaltung einer To-Do-Liste. Beginnen wir mit dem Datenmodell. Erstellen Sie eine Datei Todo.swift im Ordner 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
    }
}

Erstellen wir nun eine Migration für die Tabelle. In der Datei 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()
    }
}

Vergessen Sie nicht, die Migration in configure.swift zu registrieren:

app.migrations.add(CreateTodo())

Der Einfachheit halber verwenden wir SQLite (eine integrierte Datenbank). Fügen Sie dies zu configure.swift hinzu:

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

Schritt 3: Erstellen von REST-API-Endpunkten

Kommen wir zum interessantesten Teil – der Implementierung von CRUD-Operationen. Erstellen Sie einen Controller TodoController.swift im Ordner 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

Buchempfehlungen