Apollo iOS: Leistungsstarker GraphQL Client für Swift-Anwendungen
Apollo iOS ist eine moderne, typsichere Bibliothek für die Arbeit mit GraphQL APIs auf Apple-Plattformen: iOS, macOS, tvOS und watchOS. Entwickelt von Apollo GraphQL, bietet sie Entwicklern praktische Werkzeuge zur Ausführung von Abfragen, Mutationen und Subscriptions und generiert automatisch streng typisierten Swift-Code basierend auf Ihrem GraphQL-Schema.
Die Bibliothek eignet sich ideal für die Entwicklung moderner mobiler und Desktop-Anwendungen, die flexible Datenverarbeitung, Caching und hohe Leistung erfordern. Apollo iOS eliminiert manuelles JSON-Parsing und gewährleistet vollständige Typsicherheit zur Kompilierzeit.
Hauptfunktionen
- Automatische Codegenerierung — basierend auf .graphql-Dateien und dem Serverschema werden typisierte Datenmodelle, Abfragen und Mutationen erstellt.
- Normalisiertes Caching — der integrierte Cache aktualisiert die UI automatisch bei Datenänderungen und vermeidet Objektduplikate.
- Unterstützung für Subscriptions über WebSocket — Echtzeit-Updates für Chats, Benachrichtigungen und andere dynamische Daten.
- Integration mit SwiftUI und Combine — native asynchrone Publisher und ObservableObject für reaktive Programmierung.
- Multithreading — alle Netzwerkanfragen werden im Hintergrund ausgeführt, der Hauptthread bleibt für die UI frei.
- Unterstützung für Datei-Uploads — Arbeit mit Multipart-Anfragen zum Senden von Bildern und Dokumenten.
Installation über Swift Package Manager
Fügen Sie Apollo iOS über Xcode oder Package.swift zu Ihrem Projekt hinzu:
// Package.swiftdependencies: [ .package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.0.0")]Beispiel: Client einrichten und Abfrage ausführen
Wir erstellen eine Client-Instanz und führen eine einfache GraphQL-Abfrage zum Abrufen einer Benutzerliste aus:
import Apollo
// 1. Client erstellenlet url = URL(string: "https://api.example.com/graphql")!let store = ApolloStore()let client = ApolloClient(url: url, store: store)
// 2. Abfrage definieren (Datei Users.graphql)// query GetUsers { users { id name email } }
// 3. Abfrage ausführenclient.fetch(query: GetUsersQuery()) { result in switch result { case .success(let graphQLResult): if let users = graphQLResult.data?.users { for user in users { print("\\(user.name) — \\(user.email)") } } case .failure(let error): print("Fehler: \\(error.localizedDescription)") }}Arbeit mit Mutationen (Daten ändern)
Beispiel einer Mutation zum Erstellen eines neuen Benutzers:
// mutation CreateUser($name: String!, $email: String!) {// createUser(name: $name, email: $email) { id name email }// }
let mutation = CreateUserMutation(name: "Ivan Petrov", email: "ivan@example.com")
client.perform(mutation: mutation) { result in switch result { case .success(let graphQLResult): if let newUser = graphQLResult.data?.createUser { print("Benutzer erstellt: \\(newUser.id)") } case .failure(let error): print("Fehler beim Erstellen: \\(error)") }}Subscriptions (Echtzeit-Updates)
Für Echtzeitdaten verwenden Sie Subscriptions. Ein WebSocket-Transport ist erforderlich:
import ApolloWebSocket
let webSocketTransport = WebSocketTransport( request: URLRequest(url: URL(string: "wss://api.example.com/graphql")!))let store = ApolloStore()let client = ApolloClient(networkTransport: webSocketTransport, store: store)
// subscription OnUserAdded { userAdded { id name } }let subscription =