Share
Embed
GraphQL IRL (Android Makers)
Roberto Orgiu
April 22, 2019
Transcript
38 slides
-
film character species homeworld episode GR APHQL IN REAL L
IFE ROBERTO ORGIU - @_TIWIZ -
What is GraphQ What is GraphQL? D E E P
D I V E I N T O -
buildscriptT{ repositoriesT{ google()T jcenter() }A dependenciesT{ classpathA"com.android.tools.build:gradle:$tools_version" classpathB"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "com.apollographql.apollo:gradle-plugin:$apollo_version"
}B }C allprojectsT{ repositoriesB{ google()B jcenter() }D }E -
buildscriptT{ repositoriesT{ google()T jcenter() }A dependenciesT{ classpathA"com.android.tools.build:gradle:$tools_version" classpathB"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "com.apollographql.apollo:gradle-plugin:$apollo_version"
}B }C allprojectsT{ repositoriesB{ google()B jcenter() }D }E -
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply
plugin: 'com.apollographql.android' android { ... } -
> Task :apollo:generateDebugApolloIR FAILED .../android/apollo/Query.graphql: Cannot query field "nam" on
type "YourType". Did you mean "name"? error: Validation of GraphQL query document failed FAILURE: Build failed with an exception. -
@get:Rule val mockWebServer = MockWebServerRule() mockWebServer.enqueueResponse("/response.json") val testApolloClient = ApolloClient.builder()
.serverUrl(mockWebServer.url) .okHttpClient(client) .build() -
query filmById($filmId: ID){ film(filmID :$filmId){ title episodeID characterConnectionT{ charactersT{ name
homeworldT{ name }A speciesT{ name classification }B filmConnectionT{ filmsT{ title episodeID }C }D }E }F }G }H A u t o m a t i c P e r s i s t e d Q u e r i e s -
query filmById($filmId: ID){ film(filmID :$filmId){ title episodeID characterConnectionT{ charactersT{ name
homeworldT{ name }A speciesT{ name classification }B filmConnectionT{ filmsT{ title episodeID }C }D }E }F }G }H A u t o m a t i c P e r s i s t e d Q u e r i e s variables { "filmId" : 1 }A query: query filmById($filmId: ID) { film(filmId :$filmId) { title episodeID characterConnection { name homeworld{ name }B species { name classification }C filmConnection { films { title episodeID }D }E }F }G }H operationName: filmById -
query filmById($filmId: ID){ film(filmID :$filmId){ title episodeID characterConnectionT{ charactersT{ name
homeworldT{ name }A speciesT{ name classification }B filmConnectionT{ filmsT{ title episodeID }C }D }E }F }G }H A u t o m a t i c P e r s i s t e d Q u e r i e s variables { "filmId" : 1 }A query: query filmById($filmId: ID) { film(filmId :$filmId) { title episodeID characterConnection { name homeworld{ name }B species { name classification }C filmConnection { films { title episodeID }D }E }F }G }H operationName: filmById operationName: filmById variables { "filmId" : 1 }T -
query filmById($filmId: ID){ film(filmID :$filmId){ title episodeID characterConnectionT{ charactersT{ name
homeworldT{ name }A speciesT{ name classification }B filmConnectionT{ filmsT{ title episodeID }C }D }E }F }G }H A u t o m a t i c P e r s i s t e d Q u e r i e s variables { "filmId" : 1 }A query: query filmById($filmId: ID) { film(filmId :$filmId) { title episodeID characterConnection { name homeworld{ name }B species { name classification }C filmConnection { films { title episodeID }D }E }F }G }H operationName: filmById operationName: filmById variables { "filmId" : 1 }T -
A u t o m a t i c P
e r s i s t e d Q u e r i e s operationName: filmById variables { "filmId" : 1 }T extensions: { persistedQuery: { "version": 1, "sha256Hash": "queryHash" } } -
Android Back end Query Hash Query Hash Not Found Whole
Query + Query Hash Response -
Tricks Tricks J U S T S O M E
query SampleQuery { assetID: sourceId fingerprint: modified headlineInfo: headline { __typename headline: default }A lastUpdated: lastModification }B -
Tricks Tricks L A B E L F I E
L D S C A N G O A L O N G D I S T A N C E J U S T S O M E query SampleQuery { assetID: sourceId fingerprint: modified headlineInfo: headline { __typename headline: default }A lastUpdated: lastModification }B -
Tricks Tricks A P O L L O A D
D S T Y P E N A M E E V E R Y W H E R E J U S T S O M E query SampleQuery { assetID: sourceId fingerprint: modified headlineInfo: headline { __typename headline: default }A lastUpdated: lastModification }B -
Tricks Tricks S C H E M A A N
D Q U E R I E S C A N B E M O V E D J U S T S O M E apollo { schemaFilePath = "/path/my-schema.json" outputPackageName = "pkg.graphql.api" } -
Tricks Tricks S U P P O R T S
F O R J A V A B E A N S E M A N T I C S J U S T S O M E class Type { public Another getAnother() { ... } } //build.gradle apollo { useJavaBeansSemanticNaming = true } -
Tricks Tricks R E M E M B E R
T O B E O N L I N E ¯ \ _ ( ツ ) _ / ¯ J U S T S O M E