So schreiben Sie eine REST API in Swift in 30 Minuten: Eine 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

Einleitung: Warum Swift für REST APIs geeignet ist

\n\n

Wenn es um Serverentwicklung geht, ist Swift nicht die erste Sprache, die einem in den Sinn kommt. Doch mit dem Aufkommen des Frameworks Vapor (und seiner Alternative Kitura) ist Swift zu einem vollwertigen Werkzeug für die Erstellung von REST APIs geworden. Warum Swift auf dem Server verwenden? Erstens ist es eine einheitliche Sprache für iOS, macOS und das Backend – Sie können Datenmodelle wiederverwenden. Zweitens ist Swift schnell, sicher und bietet hervorragende Unterstützung für Asynchronität durch async/await.

\n\n

In dieser Anleitung erstellen wir eine einfache REST API zur Verwaltung einer Aufgabenliste (Todo-Liste) in Swift mit dem Framework Vapor. Sie lernen, wie Sie einen Server konfigurieren, Routen erstellen, mit JSON arbeiten und die API testen. Der gesamte Prozess dauert etwa 30 Minuten.

\n\n

Schritt 1: Installation und Projekteinrichtung

\n\n

Bevor wir Code schreiben, müssen wir die Vapor Toolbox installieren – ein Kommandozeilenwerkzeug zum Erstellen und Verwalten von Vapor-Projekten.

\n\n

Installation der Vapor Toolbox

\n

Öffnen Sie das Terminal und führen Sie Folgendes aus:

\n
brew install vapor
\n

Wenn Sie Homebrew nicht haben, installieren Sie es von brew.sh.

\n\n

Ein neues Projekt erstellen

\n

Erstellen wir ein neues Projekt mit dem Namen TodoAPI:

\n
vapor new TodoAPI -n\ncd TodoAPI
\n

Das Flag -n bedeutet „ohne Beispiel“ – wir erhalten eine leere Vorlage.

\n\n

Server starten

\n

Öffnen Sie das Projekt in Xcode:

\n
open Package.swift
\n

Wählen Sie das Schema Run und drücken Sie Cmd+R. Nach einigen Sekunden startet der Server unter http://127.0.0.1:8080. Öffnen Sie den Browser – Sie sollten eine Begrüßungsnachricht von Vapor sehen.

\n\n

Schritt 2: Erstellen des Datenmodells

\n\n

Unsere API wird Aufgaben verwalten. Jede Aufgabe hat eine ID, einen Titel und einen Erledigungsstatus (erledigt/nicht erledigt).

\n\n

Erstellen wir das Modell Todo. In Vapor sind Modelle normale Strukturen, die den Protokollen Content (für die JSON-Serialisierung) und Codable entsprechen.

\n\n

Erstellen Sie die Datei Sources/App/Models/Todo.swift:

\n
import Vapor\n\nstruct Todo: Content, Codable {\n    var id: UUID?\n    var title: String\n    var isCompleted: Bool\n    \n    init(id: UUID? = nil, title: String, isCompleted: Bool = false) {\n        self.id = id\n        self.title = title\n        self.isCompleted = isCompleted\n    }\n}
\n\n

Beachten Sie: id ist eine optionale UUID. Wir werden sie beim Erstellen der Aufgabe auf dem Server generieren.

\n\n

Schritt 3: Erstellen des Speichers und des Controllers

\n\n

Der Einfachheit halber speichern wir Aufgaben im Arbeitsspeicher (in einem Array). In einem echten Projekt würden Sie eine Datenbank (Fluent ORM) verwenden, aber für eine 30-minütige Demo ist das übertrieben.

\n\n

Speicher (In-Memory Store)

\n

Erstellen Sie die Datei Sources/App/Controllers/TodoStore.swift:

\n
import Vapor\n\nfinal class TodoStore {\n    private var todos: [Todo] = []\n    private let lock = NSLock()\n    \n    func getAll() -> [Todo] {\n        lock.lock()\n        defer { lock.unlock() }\n        return todos\n    }\n    \n    func get(id: UUID) -> Todo? {\n        lock.lock()\n        defer { lock.unlock() }\n        return todos.first { $0.id == id }\n    }\n    \n    func create(_ todo: inout Todo) -> Todo {\n        lock.lock()\n        defer { lock.unlock() }\n        todo.id = UUID()\n        todos.append(todo)\n        return todo\n    }\n    \n    func update(id: UUID, with updatedTodo: Todo) -> Todo? {\n        lock.lock()\n        defer { lock.unlock() }\n        guard let index = todos.firstIndex(where: { $0.id == id }) else { return nil }\n        var mutableTodo = updatedTodo\n        mutableTodo.id = id\n        todos[index] = mutableTodo\n        return mutableTodo\n    }\n    \n    func delete(id: UUID) ->                

Blogs

Buchempfehlungen