GraphQL-integratie in Android met de Apollo-client

  • Automatische generatie van getypte datamodellen op basis van het serverschema om parseerfouten te voorkomen.
  • Implementatie van een gestandaardiseerd cachesysteem met drie niveaus, waardoor de applicatie offline kan functioneren.
  • Native ondersteuning voor Kotlin Multiplatform en eenvoudige foutbewaking met behulp van geavanceerde interceptors.

GraphQL-integratie in Android met de Apollo-client

Als je merkt dat het handmatig verwerken van JSON in Android een echte hoofdpijn is, is het waarschijnlijk tijd om GraphQL eens te bekijken. In tegenstelling tot traditionele REST API's , waarbij je soms een enorme hoeveelheid data ontvangt die je niet nodig hebt of waar informatie ontbreekt en je drie aparte verzoeken moet doen, brengt Apollo Kotlin orde in deze chaos. Je kunt precies opvragen wat je wilt en geen byte meer.

Wat deze tool zo krachtig maakt, is dat hij niet alleen de aanvraag doet, maar ook getypte datamodellen genereert op basis van het schema van je server. Vergeet handmatig waarden casten of eindeloos worstelen met Maps; alles wordt gevalideerd aan de hand van het schema. Dus als je probeert toegang te krijgen tot een veld dat je niet in je query hebt opgevraagd, waarschuwt de compiler je nog voordat de app wordt uitgevoerd, waardoor je die vervelende onverwachte crashes voorkomt.

Initiële configuratie en afhankelijkheden

Om dit in een modern project te implementeren, is de ideale aanpak het gebruik van het build.gradle.kts- bestand . Voeg eerst de Apollo-plugin toe aan de sectie plugins en vervolgens de runtime-afhankelijkheid. Als je met Kotlin Multiplatform (KMP) werkt , is Apollo een onmisbaar hulpmiddel omdat het codegeneratie voor meerdere platforms ondersteunt, waaronder iOS, macOS en watchOS.

Het is essentieel om de pakketnaam te definiëren waar de gegenereerde modellen worden opgeslagen om het project overzichtelijk te houden. Afhankelijk van de versie die u gebruikt, van 4.x tot de recentere 5.0.0, kunnen er kleine verschillen zijn, maar de logica blijft hetzelfde: de plugin leest uw definitiebestanden en maakt specifieke Kotlin-klassen aan voor elke bewerking die u definieert.

Schema-beheer en query's

Apollo moet weten hoe je server eruitziet, en daarvoor heeft het een schema-bestand nodig. Dit kan een .graphqls- of .json-bestand zijn . De eenvoudigste manier om dit te verkrijgen is via introspectie, door het schema rechtstreeks van de server te downloaden met behulp van de terminal of tools zoals GraphiQL of Apollo Studio.

Zodra het diagram in de map staat, src/main/graphqlJe kunt beginnen met het schrijven van je bestanden. .graphqlHier definieer je je Query's, mutaties en abonnementenBij het compileren van het project genereert Apollo automatisch een klasse (bijvoorbeeld, HeroQuery.kt) die je kunt instantiëren om de oproep naar de server te doen.

ApolloClient-implementatie

GraphQL-integratie in Android met de Apollo-client

De kern van alles is de les. ApolloClientHet is verantwoordelijk voor het beheren van de communicatie met uw GraphQL-server-eindpunt. Om het correct te laten werken op Android, vergeet niet de internettoegangsrechten toe te voegen. AndroidManifest.xmlAls je dingen test in een emulator en je server draait op localhost, moet je een netwerkbeveiligingsbestand configureren om onversleuteld verkeer naar het IP-adres toe te staan. 10.0.2.2.

Om een ​​verzoek uit te voeren, gebruikt u eenvoudigweg de client en geeft u deze de gegenereerde query door. Het resultaat is een getypt object dat het antwoord bevat. Als u iets geavanceerder nodig hebt, zoals aangepaste scalaire typen (bijvoorbeeld voor het verwerken van datums), kunt u een mapping definiëren in uw build.gradle-bestand en een specifieke adapter registreren, zodat Apollo weet hoe die gegevens moeten worden geconverteerd.

Cache- en prestatiestrategieën

Een van de pronkstukken van Apollo is het opslagsysteem. Het biedt veel meer dan alleen een basisopslag; het bestaat uit drie verschillende niveaus. De HTTP Response Cache slaat onbewerkte antwoorden op, terwijl de Normalized Disk Cache gegevens in SQL opslaat, waardoor de app ook offline kan functioneren. Tot slot is de Normalized InMemory Cache ideaal voor toegang tot ultrasnelle gegevens terwijl het app-proces nog actief is.

Bovendien, als je gewend bent aan de oude aanpak of aan projecten die reactiviteit vereisen, biedt Apollo solide ondersteuning voor RxJava 1 en 2. Je kunt Apollo-aanroepen in Observables of Singles verpakken, waardoor integratie met asynchrone dataflows eenvoudig is, zolang je maar niet vergeet Disposables correct te beheren om geheugenlekken te voorkomen.

Monitoring en foutopsporing met Sentry

Wanneer je app in productie gaat, moet je weten wat er misgaat. Integratie met Sentry stelt je in staat om interceptors aan ApolloClient toe te voegen om elk HTTP-verzoek te traceren. Dit creëert een gedetailleerd spoor van bewerkingen, waarbij GraphQL-clientfouten , zoals foutcodes of mislukte bewerkingen, automatisch worden vastgelegd en gegroepeerd op bewerkingsnaam.

Om te voorkomen dat gevoelige gegevens worden verzonden, is het raadzaam om variabelen in query's te gebruiken in plaats van samengevoegde tekenreeksen, aangezien Sentry een PII-filtering (persoonlijk identificeerbare informatie) automatisch. U kunt ook aanpassen welke gebeurtenissen worden vastgelegd met behulp van een BeforeSendCallbackwaardoor u volledige controle krijgt over de telemetrie van uw datalaag.

Het gebruik van deze client transformeert de netwerkarchitectuur van Android door dataredundantie te elimineren en ervoor te zorgen dat de communicatie tussen de frontend en backend veilig, efficiënt en uiterst gemakkelijk te onderhouden is dankzij automatische codegeneratie.


Voeg dit toe als voorkeursbron in Google.