尝试运行 Apollo GraphQL 客户端(Android)的记录备忘
摘要
我有机会在开发中接触到GraphQL,所以我阅读了《使用Android的GraphQL客户端Apollo玩转Github GraphQL API v4》,并试着操作了一下。
环境如下:
Kotlin版本为1.3.10,
rxjava版本为2.2.4,
rxandroid版本为2.1.0,
rxkotlin版本为2.3.0。
样本
因为上述Qiita文章已经详细解释了步骤,所以我会简略地省略掉。
按照上述Qiita文章中的步骤,我尝试调用Github的GraphQL API。
在build.gradle(app)中添加(尽管apollo-android 1.0.x已经发布,但是带有alpha标记,因此使用0.5.0版本)。
apply plugin: 'com.apollographql.android'
~
implementation 'com.apollographql.apollo:apollo-runtime:0.5.0'
implementation "com.apollographql.apollo:apollo-rx2-support:0.5.0"
将以下内容添加到build.gradle(project)文件中。
dependencies {
~
classpath 'com.apollographql.apollo:apollo-gradle-plugin:0.5.0'
}
使用Kotlin的地方
val okHttpClient = OkHttpClient.Builder()
.authenticator { _, response ->
response.request().newBuilder()
.addHeader("Authorization", "Bearer <Access Token>")
.build()
}.build()
val apolloClient = ApolloClient.builder()
.okHttpClient(okHttpClient)
.serverUrl("https://api.github.com/graphql")
.build()
Rx2Apollo.from(apolloClient.query(ViewerQuery()))
.subscribeBy(
onNext = {
it.data()?.let { data ->
Log.d("### TYPE_NAME", data.viewer().__typename())
}
},
onError = {
// Do something
},
onComplete = {
// Do something
}
).addTo(disposable)
通过使用Rx2Apollo,可以顺利将RxJava引入正在使用的项目中。
由于使用了OKHttp作为HTTP通信客户端,因此可以像使用OKHttp一样轻松地附加认证信息。
迷上了的焦点
响应解析失败
在Apollo中,当将schema.json文件和.graphql文件放置在指定的位置并进行构建时,将生成用于将GraphQL请求和响应映射到对象的类。
如果使用生成的类没有问题,但如果响应的解析失败,则可能出现部分映射无法正常工作的情况。
在这种情况下,需要检查错误日志并在build.gradle中指定映射。
所需的编写如下所示。
apollo {
customTypeMapping['URI'] = "String"
}
※如果上述的现有类与GraphQL上的类型名匹配,则可能发生这种情况。
闲谈
自从apollo-android v1.0.0-alpha发布以来已经过了一段时间,但是很难脱离alpha阶段,所以暂时还是使用0.5.0版本比较好。
因为我刚开始接触它,还需要进一步学习。