尝试运行 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版本比较好。
因为我刚开始接触它,还需要进一步学习。

广告
将在 10 秒后关闭
bannerAds