Arbeiten mit APIs in Swift: REST, GraphQL, gRPC – was wählt man 2025?

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

API in Swift: Von der Theorie zu echten Anfragen

\n\n

Jeder iOS-Entwickler steht früher oder später vor der Notwendigkeit, dass die App mit einem Server kommuniziert. Ob das Laden eines Nachrichtenfeeds, das Senden von Formulardaten oder Streaming in Echtzeit – ohne API (Application Programming Interface) geht es nicht. Aber welches Protokoll soll man wählen? Das klassische REST, das flexible GraphQL oder das extrem schnelle gRPC?

\n\n

In diesem Artikel listen wir nicht nur Vor- und Nachteile auf. Wir analysieren die Arbeit mit APIs in Swift anhand realer Beispiele, zeigen Code und geben praktische Tipps. Sie erfahren, wie Sie die Netzwerkschicht richtig strukturieren, welche Bibliotheken Sie verwenden sollten und wann jeder Ansatz die beste Wahl ist.

\n\n

Wenn Sie in Swift programmieren und möchten, dass Ihre App schnell, zuverlässig und elegant mit dem Backend kommuniziert – dann ist dieser Artikel für Sie. Los geht's!

\n\n

REST API in Swift: Ein Klassiker, der nicht altert

\n\n

REST (Representational State Transfer) ist ein Architekturstil, der HTTP-Methoden (GET, POST, PUT, DELETE) zur Arbeit mit Ressourcen verwendet. Die meisten öffentlichen APIs (GitHub, Twitter, Stripe) basieren auf REST. Für einen Swift-Entwickler bedeutet das, dass Sie mit JSON, URLSession oder Alamofire arbeiten werden.

\n\n

Basis-GET-Anfrage mit URLSession

\n\n

Beginnen wir mit dem Einfachsten – dem Abrufen von Daten. Stellen wir uns vor, wir müssen eine Liste von Benutzern von JSONPlaceholder laden:

\n\n
import Foundation\n\nstruct User: Codable {\n    let id: Int\n    let name: String\n    let email: String\n}\n\nfunc fetchUsers() async throws -> [User] {\n    let url = URL(string: "https://jsonplaceholder.typicode.com/users")!\n    let (data, response) = try await URLSession.shared.data(from: url)\n    \n    guard let httpResponse = response as? HTTPURLResponse,\n          (200...299).contains(httpResponse.statusCode) else {\n        throw URLError(.badServerResponse)\n    }\n    \n    return try JSONDecoder().decode([User].self, from: data)\n}\n\nTask {\n    do {\n        let users = try await fetchUsers()\n        print("Geladen \\(users.count) Benutzer")\n    } catch {\n        print("Fehler: \\(error.localizedDescription)")\n    }\n}
\n\n

Beachten Sie die Verwendung von async/await – dies ist die moderne Art, mit asynchronem Code in Swift zu arbeiten. Der Code ist lesbar und kurz, ohne Closures und Callbacks.

\n\n

POST-Anfrage mit Alamofire

\n\n

Alamofire ist die beliebteste Bibliothek für die Netzwerkprogrammierung in Swift. Sie vereinfacht die Fehlerbehandlung, die Codierung von Parametern und das Hochladen von Dateien. Hier ist ein Beispiel zum Senden von Daten:

\n\n
import Alamofire\n\nstruct NewUser: Encodable {\n    let name: String\n    let email: String\n}\n\nAF.request("https://jsonplaceholder.typicode.com/users",\n           method: .post,\n           parameters: NewUser(name: "Ivan", email: "ivan@example.com"),\n           encoder: JSONParameterEncoder.default)\n    .validate()\n    .responseDecodable(of: User.self) { response in\n        switch response.result {\n        case .success(let user):\n            print("Benutzer mit id erstellt: \\(user.id)")\n        case .failure(let error):\n            print("Fehler: \\(error.localizedDescription)")\n        }\n    }
\n\n

Tipp: Verwenden Sie .validate() – dies prüft automatisch den Statuscode und wandelt HTTP-Fehler in Alamofire-Fehler um. Ihr Code wird sauberer und das Debuggen einfacher.

\n\n

Wann ist REST die beste Wahl?

\n
    \n
  • Sie haben eine einfache CRUD-Anwendung (Notizen, Aufgabenliste).
  • \n
  • Die API stellt feste Endpunkte bereit.
  • \n
  • Sie benötigen keine komplexe Datenverschachtelung.
  • \n
\n\n

GraphQL in Swift: Flexibilität bei Abfragen

\n\n

GraphQL ist eine Abfragesprache, die es dem Client ermöglicht, genau die Daten anzufordern, die er benötigt. Kein Over-fetching (überflüssige Felder) oder Under-fetching (mehrere Anfragen nötig). Für Swift gibt es die hervorragende Bibliothek Apollo iOS

Blogs

Buchempfehlungen