Pagsasama ng GraphQL sa Android kasama ang Apollo client

  • Awtomatikong pagbuo ng mga naka-type na modelo ng datos batay sa schema ng server upang maiwasan ang mga error sa pag-parse.
  • Pagpapatupad ng isang standardized na three-level caching system na nagpapahintulot sa application na gumana nang offline.
  • Native na suporta para sa Kotlin Multiplatform at madaling pagsubaybay sa error gamit ang mga advanced na interceptor.

Pagsasama ng GraphQL sa Android kasama ang Apollo client

Kung sa tingin mo ay talagang sakit ng ulo ang manu-manong paghawak ng JSON sa Android, marahil ay oras na para tingnan ang GraphQL. Hindi tulad ng Mga Tradisyonal na REST APIkung saan minsan ay nakakatanggap ka ng maraming data na hindi mo kailangan o may mga bagay kang kulang at kailangan mong gumawa ng tatlong magkakaibang kahilingan, Apollo Kotlin Dumarating ito upang magdala ng kaayusan sa kaguluhang ito, na nagbibigay-daan sa iyong isaayos nang eksakto kung ano ang gusto mo at hindi na hihigit pa sa kahit isang byte.

Ang dahilan kung bakit napakalakas ng tool na ito ay hindi lang ito basta humihiling, kundi bumubuo ng mga naka-type na modelo ng datos batay sa schema ng iyong server. Kalimutan ang manu-manong pag-cast ng mga value o ang paghihirap sa walang katapusang Maps; dito, lahat ay pinapatunayan laban sa schema, kaya kung susubukan mong i-access ang isang field na hindi mo hiniling sa iyong query, babalaan ka ng compiler bago pa man patakbuhin ang app, na magliligtas sa iyo mula sa mga nakakainis na hindi inaasahang pag-crash.

Paunang configuration at mga dependency

Para simulan ang pag-assemble nito sa isang modernong proyekto, ang mainam na gawin ay gamitin ang file na build.gradle.ktsUna, kailangan mong idagdag ang Apollo plugin sa seksyon ng mga plugin at pagkatapos ay isama ang runtime dependency. Kung nagtatrabaho ka gamit ang Kotlin Multiplatform (KMP)Ang Apollo ay isang hindi kapani-paniwalang kakampi dahil sinusuportahan nito ang pagbuo ng code para sa maraming platform, kabilang ang iOS, macOS, at watchOS.

Mahalagang tukuyin ang pangalan ng pakete kung saan ise-save ang mga nabuong modelo upang mapanatiling malinis ang proyekto. Depende sa bersyong iyong ginagamit, mula 4.x hanggang sa mas bagong 5.0.0, maaaring makakita ka ng kaunting mga pagkakaiba-iba, ngunit pareho ang lohika: binabasa ng plugin ang iyong mga file ng kahulugan at lumikha ng mga partikular na klase ng Kotlin para sa bawat operasyon na iyong tinukoy.

Pamamahala ng Schema at mga Query

Kailangang malaman ng Apollo kung ano ang hitsura ng iyong server, at para diyan ay nangangailangan ito ng schema file. Maaari itong maging isang isang .graphqls file o isang .json fileAng pinakasimpleng paraan upang makamit ito ay sa pamamagitan ng pagmumuni-muni, pag-download ng schema nang direkta mula sa server gamit ang terminal o mga tool tulad ng GraphiQL o Apollo Studio.

Kapag nasa folder mo na ang diagram src/main/graphqlMaaari mo nang simulan ang pagsusulat ng iyong mga file .graphqlDito mo tinutukoy ang iyong Mga Query, Mutasyon at SubscriptionKapag kino-compile ang proyekto, awtomatikong bubuo ang Apollo ng isang klase (halimbawa, HeroQuery.kt) na maaari mong i-instantiate upang gawin ang tawag sa server.

Implementasyon ng ApolloClient

Pagsasama ng GraphQL sa Android kasama ang Apollo client

Ang pinakasentro ng lahat ay ang klase ApolloClientIto ang responsable sa pamamahala ng komunikasyon sa iyong GraphQL server endpoint. Para gumana ito nang tama sa Android, huwag kalimutang idagdag ang pahintulot sa Internet sa AndroidManifest.xmlKung sinusubukan mo ang mga bagay-bagay sa isang emulator at ang iyong server ay nasa localhost, kakailanganin mong i-configure ang isang network security file upang payagan ang malinaw na trapiko ng teksto patungo sa IP address. 10.0.2.2.

Para maisagawa ang isang kahilingan, gagamitin mo lang ang client at ipapasa rito ang nabuong query. Ang resulta ay isang naka-type na object na naglalaman ng tugon. Kung kailangan mo ng mas advanced, tulad ng mga pasadyang uri ng scalar (halimbawa, para pangasiwaan ang mga petsa), maaari kang magtakda ng mapping sa build.gradle at magparehistro ng isang partikular na adapter para malaman ng Apollo kung paano i-convert ang data na iyon.

Mga Istratehiya sa Cache at Pagganap

Isa sa mga hiyas ng Apollo ay ang sistema ng imbakan nito. Hindi lang ito natatapos sa ibabaw; nag-aalok ito ng tatlong natatanging antas. HTTP Response Cache Iniimbak nito ang mga hilaw na sagot, habang ang Na-normalize na Disk Cache Pinapanatili nito ang data sa SQL, na nagpapahintulot sa app na gumana kahit offline. Panghuli, ang Na-normalize na InMemory Cache Ito ay mainam para sa pag-access ng napakabilis na data habang tumatakbo pa rin ang proseso ng app.

Bukod pa rito, kung galing ka sa dating paaralan o mula sa mga proyektong nangangailangan ng pagtugon, ang Apollo ay may matibay na suporta para sa RxJava 1 at 2Maaari mong i-wrap ang mga tawag sa Apollo sa Observables o Singles, na ginagawang mas madali ang pag-integrate sa mga asynchronous data flow, basta't naaalala mong maayos na pamahalaan ang mga Disposable upang maiwasan ang mga memory leak.

Pagsubaybay at Pag-debug gamit ang Sentry

Kapag nagsimula nang i-produce ang app, kailangan mong malaman kung ano ang mali. Pagsasama sa Nagbabantay Pinapayagan ka nitong magdagdag ng mga interceptor sa ApolloClient upang subaybayan ang bawat kahilingan ng HTTP. Lumilikha ito ng detalyadong trail ng mga operasyon, awtomatikong kinukuha Mga error sa kliyente ng GraphQL, tulad ng mga nabigong response code o mga hindi magandang operasyon, na pinapangkat ang mga ito ayon sa pangalan ng operasyon.

Para maiwasan ang pagpapadala ng sensitibong datos, inirerekomendang gumamit ng mga variable sa mga query sa halip na mga pinagsama-samang string, dahil maaaring maglapat ang Sentry ng Pag-filter ng PII (personal na impormasyong makikilala) nang awtomatiko. Maaari mo ring i-customize kung aling mga kaganapan ang makukuha gamit ang isang BeforeSendCallbacknagbibigay sa iyo ng kumpletong kontrol sa telemetry ng iyong data layer.

Binabago ng paggamit ng client na ito ang arkitektura ng Android network sa pamamagitan ng pag-aalis ng data redundancy at pagtiyak na komunikasyon sa pagitan ng frontend at backend maging ligtas, mabisa at napakadaling panatilihin salamat sa awtomatikong pagbuo ng code.


Idagdag bilang ginustong mapagkukunan