HTTP-Client in Swift: Anfragen richtig stellen von A bis Z

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 es wichtig ist, mit HTTP in Swift arbeiten zu können

\n

Moderne mobile und Desktop-Anwendungen existieren selten isoliert. Praktisch jede App – vom Wetter-Widget bis zur Banking-Anwendung – tauscht Daten mit einem Server aus. Dafür wird das HTTP-Protokoll verwendet, und auf der Swift-Seite (iOS/macOS) ist das Hauptwerkzeug das Framework Foundation und seine Klasse URLSession.

\n

In diesem Artikel werden wir durchgehen, wie man einen HTTP-Client in Swift richtig erstellt: von einer einfachen GET-Anfrage bis hin zu komplexer Fehlerbehandlung und Arbeit mit JSON. Das Material wird sowohl für Anfänger nützlich sein, die gerade erst mit der iOS-Entwicklung beginnen, als auch für erfahrene Entwickler, die ihr Wissen systematisieren möchten.

\n

Wir betrachten den modernen Ansatz mit async/await (Swift 5.5+), der den Code sauber und lesbar macht, und gehen auch auf die klassischen Methoden mit Completion-Handlern (completion handlers) für die Abwärtskompatibilität ein.

\n\n

Grundlagen von URLSession: Erstellung und Konfiguration

\n

Die Klasse URLSession ist der Haupt-"Dirigent" von Netzwerkanfragen in Swift. Sie verwaltet Verbindungen, Caching und Authentifizierung. Bevor man Anfragen stellt, muss man eine Instanz der Session erstellen.

\n\n

Session-Typen

\n
    \n
  • Shared (Singleton): URLSession.shared – eine einfache Session ohne Anpassung. Geeignet für grundlegende Anfragen.
  • \n
  • Default: URLSession(configuration: .default) – ermöglicht die Konfiguration von Timeouts, Cache und Headern.
  • \n
  • Ephemeral: URLSession(configuration: .ephemeral) – speichert weder Cache noch Cookies auf der Festplatte. Ideal für private Daten.
  • \n
  • Background: URLSession(configuration: .background(withIdentifier:)) – für Hintergrund-Downloads/-Uploads, auch wenn die App minimiert ist.
  • \n
\n\n
import Foundation\n\n// Einfache Session\nlet sharedSession = URLSession.shared\n\n// Benutzerdefinierte Session mit einem Timeout von 30 Sekunden\nlet config = URLSessionConfiguration.default\nconfig.timeoutIntervalForRequest = 30\nconfig.timeoutIntervalForResource = 60\nlet customSession = URLSession(configuration: config)\n
\n\n

Erstellung und Versand von HTTP-Anfragen

\n

Die Anfrage wird mit der Klasse URLRequest erstellt. Sie enthält die URL, die HTTP-Methode, Header und den Anfragekörper. Wir betrachten die wichtigsten Methoden: GET und POST.

\n\n

GET-Anfrage mit async/await (moderner Ansatz)

\n

Ab Swift 5.5 hat Apple die Unterstützung für asynchrone Funktionen (async/await) hinzugefügt. Dies ist die prägnanteste und sicherste Art, mit dem Netzwerk zu arbeiten.

\n\n
func fetchData(from urlString: String) async throws -> Data {\n    guard let url = URL(string: urlString) else {\n        throw URLError(.badURL)\n    }\n    \n    var request = URLRequest(url: url)\n    request.httpMethod = "GET"\n    request.setValue("application/json", forHTTPHeaderField: "Accept")\n    \n    let (data, response) = try await URLSession.shared.data(for: request)\n    \n    // HTTP-Status prüfen\n    guard let httpResponse = response as? HTTPURLResponse,\n          (200...299).contains(httpResponse.statusCode) else {\n        throw URLError(.badServerResponse)\n    }\n    \n    return data\n}\n\n// Verwendung:\nTask {\n    do {\n        let data = try await fetchData(from: "https://api.example.com/users")\n        print("Erhalten \\(data.count) Bytes")\n    } catch {\n        print("Fehler: \\(error.localizedDescription)")\n    }\n}\n
\n\n

POST-Anfrage mit JSON-Body

\n

Zum Senden von Daten an den Server wird die POST-Methode verwendet. Der Anfragekörper wird normalerweise in JSON kodiert.

\n\n
struct User: Codable {\n    let name: String\n    let email: String\n}\n\nfunc createUser(_ user: User) async throws -> Data {\n    let url = URL(string: "https://api.example.com/users")!\n    var request = URLRequest(url: url)\n    request.httpMethod = "POST"\n    request.setValue("application                

Blogs

Buchempfehlungen