Einleitung: Warum GraphQL und Swift das ideale Paar sind
Moderne iOS-Entwicklung ist ohne effiziente Serverkommunikation undenkbar. REST-API weicht zunehmend der flexibleren und leistungsfähigeren Technologie — GraphQL. In diesem Tutorial werden wir praktisch erarbeiten, wie man die GraphQL-API in eine Swift-App integriert, und zwar mit der Bibliothek Apollo iOS.
GraphQL ermöglicht es, genau die Daten anzufragen, die benötigt werden — nicht mehr und nicht weniger. Für Swift bedeutet das weniger Datenverkehr, schnellere Arbeitsabläufe und vereinfachten Code. Wir gehen den gesamten Weg: von der Projekteinrichtung bis zur Ausführung komplexer Abfragen und Mutationen.
1. Projekteinrichtung und Installation von Apollo iOS
Der erste Schritt ist die Vorbereitung des Xcode-Projekts und die Installation der Abhängigkeiten. Der bequemste Weg ist über den Swift Package Manager.
1.1 Ein neues Projekt erstellen
Öffnen Sie Xcode und erstellen Sie ein neues Projekt (iOS App oder macOS App). Wählen Sie SwiftUI oder UIKit — das ist nicht entscheidend. Nennen wir es GraphQLDemo.
1.2 Hinzufügen von Apollo iOS über SPM
- Gehen Sie in Xcode zu: File → Add Package Dependencies...
- Fügen Sie die Repository-URL ein:
https://github.com/apollographql/apollo-ios.git - Wählen Sie die neueste stabile Version und klicken Sie auf Add Package.
- Stellen Sie sicher, dass das Paket zum Target Ihrer App hinzugefügt wurde.
1.3 Codegenerierung des Schemas
Apollo iOS verwendet Codegenerierung. Dafür benötigen wir eine Schema-Datei .graphqls (normalerweise vom Server heruntergeladen) und Abfragedateien .graphql.
// Projektstruktur:// GraphQLDemo/// ├── GraphQL/// │ ├── schema.graphqls // Serverschema// │ ├── Queries.graphql // Abfragen// │ └── Mutations.graphql // MutationenNachdem Sie die Dateien hinzugefügt haben, starten Sie die Codegenerierung über das Terminal:
cd /pfad/zum/projekt./Pods/Apollo/apollo-ios-cli --download-schema --endpoint=https://ihr-server/graphql./Pods/Apollo/apollo-ios-cli --generateJetzt haben Sie generierte Swift-Dateien mit Typen und Abfragen.
2. Basisabfrage (Query) in Swift
Lassen Sie uns eine einfache Abfrage zum Abrufen einer Benutzerliste durchgehen. Angenommen, unser Schema enthält den Typ User mit den Feldern id, name, email.
2.1 Erstellen einer .graphql-Datei
Erstellen Sie im Ordner GraphQL eine Datei Queries.graphql:
query GetUsers { users { id name email }}2.2 Ausführen der Abfrage in Swift
Zuerst initialisieren wir den Apollo-Client:
import Apollo
class NetworkManager { static let shared = NetworkManager() let apollo: ApolloClient private init() { let url = URL(string: "https://ihr-server/graphql")! apollo = ApolloClient(url: url) }}Jetzt führen wir die Abfrage in einem beliebigen ViewController oder ViewModel aus:
import SwiftUI
struct UsersView: View { @State private var users: [GetUsersQuery.Data.User] = [] var body: some View { List(users, id: \\.id) { user in VStack(alignment: .leading) { Text(user.name) .font(.headline) Text(user.email) .font(.subheadline) .foregroundColor(.gray) } } .onAppear { loadUsers() } } private func loadUsers() { NetworkManager.shared.apollo.fetch(query: GetUsersQuery()) { result in switch result { case .success(let graphQLResult): if let usersData = graphQLResult.data?.users { self.users = usersData } case .failure(let error): print("Fehler: \\(error.localizedDescri