Graphql & Validation of GraphQL query document failed

Caused by: org.gradle.process.internal.ExecException: Process 'command '/Users/jake/Documents/code/riseon_android/riseon-parents-android/app/.gradle/nodejs/node-v6.7.0-darwin-x64/bin/node'' finished with non-zero
error: Validation of GraphQL query document failed

我们知道,Graphql 不需要后端每个请求都提拱接口,只需要提供一个base接口,就可以访问一系列的数据,按需请求,按需返回数据。

前言

schema.json & *.graphq文件

那么Graph是如何完成这个过程的呢?
依靠schema.json 和 接口定义文件 *.graphql (暂且这么称呼)

作用说明

schema.json 文件
是根据服务器的网络地址通过命令生成的(ios 可以直接生成schema.json,Android 生成可以参考我的另一篇简书《Graphql & Android 生成 schema.json 文件步骤》),
其主要作用有点类似Android中的binder机制,中介并规范双方通信,加密(个人拙见)

*.graphql文件
可按需建立多个,真正体现graphql灵活性的正在于此!
相当于前端自己在写接口,graph会根据该类文件生成辅助类,而后直接调用就行了

Rise.graphql

附部分文件内容:(需要按照教程语法码)

# 用户登录
mutation Login($mobile:String!, $password: String!) {
  createUserToken(mobile:$mobile,password: $password) {
    id
    token{
        token
      expired_at
      refresh_expired_at
    }
  }
}

在代码中使用

// LoginMutations 是自动生成的
 LoginMutation.builder()
                    .mobile(et_login_phone.text.toString())
                    .password(et_login_password.text.toString())
                    .build().request({
                        loadingDialog.dismiss()
                        startActivity<MainActivity>()
                        finish()
                    },{
                        _,_->
                        loadingDialog.dismiss()
                        false
                    })

注意

而我要说的正在于此!下面是我今天在Rise.graphql文件中添加新的配置时的报错:

Caused by: org.gradle.process.internal.ExecException: Process 'command '/Users/jake/Documents/code/riseon_android/riseon-parents-android/app/.gradle/nodejs/node-v6.7.0-darwin-x64/bin/node'' finished with non-zero
error: Validation of GraphQL query document failed

百思不得其解,后来才发现graphql的个别独特的参数类型,导致这个错误,看下面:


id 的类型 是 ID ,而不是 int,我想当然的认为是 int ,导致报错

原来 id 的类型 是 ID ,而不是 int,我想当然的认为是 int ,导致报错

The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.

附:bug详情

Caused by: org.gradle.process.internal.ExecException: Process 'command '/Users/jake/Documents/code/riseon_android/riseon-parents-android/app/.gradle/nodejs/node-v6.7.0-darwin-x64/bin/node'' finished with non-zero exit value 1
    at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:382)
    at org.gradle.process.internal.DefaultExecAction.execute(DefaultExecAction.java:31)
    at org.gradle.api.internal.file.DefaultFileOperations.exec(DefaultFileOperations.java:188)
    at org.gradle.api.internal.project.DefaultProject.exec(DefaultProject.java:1086)
    at org.gradle.api.internal.project.DefaultProject.exec(DefaultProject.java:1081)
    at org.gradle.api.Project$exec$2.call(Unknown Source)
    at com.moowork.gradle.node.exec.ExecRunner.run(ExecRunner.groovy:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:174)
    at com.moowork.gradle.node.exec.NodeExecRunner.doExecute(NodeExecRunner.groovy:44)
    at com.moowork.gradle.node.exec.ExecRunner.execute(ExecRunner.groovy:66)
    at com.moowork.gradle.node.exec.ExecRunner$execute.call(Unknown Source)
    at com.moowork.gradle.node.task.NodeTask.exec(NodeTask.groovy:81)
    at com.apollographql.apollo.gradle.ApolloIRGenTask.exec(ApolloIRGenTask.java:112)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:780)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:747)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
    ... 32 more
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容