执行一个 GraphQL 查询,一般会从一个对象开始,一组大括号,里面需要一个入口字段的名字,这些入口就是在 GraphQL 服务的 Query 类型里面定义好的,另外这里还有 GraphQL 的 Introspection 系统里定义的两个字段,__schema 还有 __type。
这里我们先用一下 getHello 这个字段,执行一下,从服务端那里得到的响应会显示在右侧。响应的数据里面默认会包含一个 data 属性,它里面的东西就是我们选择查询的字段,这里就是 getHello,它的值是一个字符串。
再试一个查询,用一下 users 这个字段,执行一下这条信息,这次得到的响应是个错误列表,里面有一条错误信息,提示要继续选择一些子字段。
这是因为,users 返回的东西是一组 User 对象,这个对象里面有一些字段,所以我们必须要继续选择需要这个 User 对象里的那些字段。
这里我需要的是用户的 id,还有用户的 name 字段。 执行一下这个查询,返回的结果就是一组用户数据,每个用户项目里面都有一个 id 还有一个 name 属性。
你会发现,使用 GraphQL 查询数据的时候,获取到的数据的形状,跟我们写的这个查询非常像。也就是,在做查询的时候,我们就知道最终得到的数据是什么样子的。
比如这条查询, 我知道响应的数据里面会包含一个 users 属性,它的值是个数组,每个数组项目里面都会有一个 id 还有一个 name 属性。
在选择的用户字段这里,再添加一个 age,执行一下这个查询,这次响应回来的是一些错误信息,提示在 User 类型上不能查询 age 字段,因为在 User 类型上,还不存在 age 字段。
这里可以用一个在 User 上存在的字段,比如再添加一个 posts,这个字段的值是一组 Post 数据,所以需要再设置一下需要的 Post 字段,比如内容的 id ,还有内容的 title 。 执行一下。
这次响应的结果里面,每个用户项目里面会多出一个 posts 属性,它的值是一组用户发布的内容,每个内容项目里面会包含一个 id 属性,还有一个 title 属性。
参数
有些字段支持使用参数,新建一个标签,再写一个查询。 用一下 Query 类型里的 user 字段,这个字段上面有个 id 参数,这个 id 就是用户的 id 号。
字段返回的是个 User 对象,所以要继续选择要使用的字段,需要 User 里的 name 还有 posts,User 里的 posts 字段返回的是一组 Post 类型的对象,再继续选择需要的字段,比如内容的 id 还有 title 。
执行一下这个查询,从服务端那里得到的响应就是 id 号是 1 的这个用户相关的数据。里面有用户的 name 还有 posts,就是它发布的内容列表,每个内容项目里面又会包含 id 还有 title 这两个属性。这些就是我们在做 GraphQL 查询的时候要求的字段。
mutation
刚才我们做的查询都是 query ,默认在查询里面可以忽略掉操作类型的名字,不过如果我们要做的是其它类型的操作,比如 mutation,这就需要在查询里面加上一个操作类型的名字。
新建一个标签,再写一个查询 ,先要设置一下操作类型,比如 mutation,要修改应用里的数据,一般都会执行这种 mutation 操作。
然后是一个对象,里面是要使用的字段,这些字段是在 GraphQL 的 Schema 里面的 Mutation 类型里面定义好的。
暂时我们这个 GraphQL 服务里,只有一个 Mutation 字段,名字是 updateUserName, 用一下它,这个字段支持两个参数,一个是 id,它的值是要修改名字的用户的 id 号,第二个参数是 newName,是要修改之后的名字的值。
这个字段返回是一个 User 类型的数据,就是一个用户。 所以需要继续选择要使用的 User 字段,需要 id 还有 name。
执行一下,服务器响应回来的数据就是修改了名字之后的这个用户,数据里面包含了用户的 id 还有 name 这两个属性。