Я хочу использовать Apollo Android для запроса API GitHub GraphQL, используя Kotlin с Gradle Kotlin DSL, но не на Android.
Сообщение об ошибке
Я сталкиваюсь с определенной проблемой c, но это, вероятно, потому, что в моей установке где-то что-то не так.
Подводя итог, у меня есть ViewLogin.graphql
файл, из которого генерируется ViewLoginQuery
, но когда я пытаюсь использовать ViewLoginQuery.builder()
, возникает проблема unresolved reference: builder
.
Настройка
Как упоминалось в https://github.com/apollographql/apollo-android/issues/1573, должно быть возможно использовать Apollo Android без Android.
Среда
Я использую Arch Linux и IntelliJ, с JS GraphQL Установленный плагин IntelliJ.
Gradle Kotlin Файл сборки DSL
При записи файла сборки я уже столкнулся с проблемой: мне не удалось избежать использования устарела buildscript
блок.
Плагин, показанный в https://plugins.gradle.org/plugin/com.apollographql.apollo, по-видимому, является инкубационным плагином, как упомянуто в https://github.com/apollographql/apollo-android/issues/1573#issuecomment -575613238 , который еще не готов.
Следующий файл сборки, по-видимому, правильно применяет плагин:
buildscript {
repositories {
maven {
url = uri("https://plugins.gradle.org/m2/")
}
jcenter()
}
dependencies {
classpath("com.apollographql.apollo:apollo-gradle-plugin:1.2.2")
}
}
apply(plugin = "com.apollographql.android")
plugins {
val kotlinVersion = "1.3.60"
application
kotlin("jvm") version kotlinVersion
java
idea
}
dependencies {
implementation(kotlin("stdlib"))
// Apollo and dependencies
implementation("com.apollographql.apollo:apollo-runtime:1.2.2")
implementation("com.squareup.okio:okio:2.4.3")
implementation("org.jetbrains:annotations:13.0")
testImplementation("org.jetbrains:annotations:13.0")
}
repositories {
mavenCentral()
mavenLocal()
jcenter()
}
tasks.withType<com.apollographql.apollo.gradle.ApolloCodegenTask> {
generateKotlinModels.set(true)
}
, поэтому после синхронизации у меня доступны задачи Apollo Gradle.
Загрузка схемы
Я установил Apollo cli interface , а затем, следуя Apollo docs , я запустил
apollo schema:download --endpoint=https://api.github.com/graphql --header="Authorization: Bearer mytoken"
, который дал мне schema.json
, который я вставил src/main/graphql/nl/mypackage/myapplication/schema.json
.
Пример запроса
У меня есть файл src/main/graphql/nl/mypackage/myapplication/ViewLogin.graphql
, который содержит query ViewLogin { viewer { login }}
. IntelliJ показывает ошибку на viewer
и login
, говоря Unknown field "viewer" on object type "Query". Did you mean "viewer"?
. Но это может быть неправильной конфигурацией плагина JS GraphQL. Я попытался настроить JS GraphQL, добавив файл src/main/graphql/nl/mypackage/myapplication/.graphqlconfig
, содержащий
{
"name": "GitHub GraphQL Schema",
"schemaPath": "schema.json",
"extensions": {
"endpoints": {
"Default GraphQL Endpoint": {
"url": "https://api.github.com/graphql",
"headers": {
"user-agent": "JS GraphQL"
},
"introspect": true
}
}
}
}
, но ошибки остались.
Затем я выполнил задачу Gradle generateApolloClasses
, которая сгенерировала build/generated/source/apollo/classes/main/nl/mypackage/myapplication/ViewLoginQuery.kt
файл. Когда я открываю этот файл, ошибки не отображаются, и все выглядит нормально.
Выполнить запрос
В файле src/main/kotlin/nl/mypackage/myapplication/GraphqlExample.kt
Я попытался использовать запрос, следуя документам на https://www.apollographql.com/docs/android/essentials/get-started/#consuming -код , но когда я пытаюсь использовать ViewLoginQuery.builder()
, builder
не распознается (IntelliJ, а также когда я пытаюсь его запустить).
Я пытался искать в суперклассах ViewLoginQuery, но я не смог найти ничего о сборщике.