Advanced Guides
创建Parse 3.10及以上版本与Relay的兼容性指南
14 分
中继兼容性 介绍 parse server graphql api 遵循当前可用于高度可扩展 api 和雄心勃勃的前端项目的最新标准。 parse 开源团队选择遵循 graphql 服务器 https //relay dev/docs/en/graphql server specification 规范。 中继是一个用于构建数据驱动的 react 应用程序的 javascript 框架,基于 graphql,旨在从头开始易于使用、可扩展,最重要的是,性能优越。中继通过静态查询和提前生成代码来实现这一点。 从 parse 3 10 开始,完全兼容 https //relay dev/docs/en/graphql server specification 已实现。 本文档将引导您了解这些实现。 先决条件 要开始本教程,您需要: 在 back4app 创建的应用程序 查看 https //www back4app com/docs/get started/new parse app 以了解如何在 back4app 上创建应用程序。 1 创建一个新的 back4app 应用程序 首先,您需要确保在 back4app 上创建了一个现有的应用程序。如果您是新用户,可以查看 https //www back4app com/docs/get started/new parse app 以了解如何创建一个。 2 创建几个类 在您新创建的应用程序中,转到 数据库浏览器 数据库浏览器 并点击 创建一个类 创建一个类 按钮 选择创建一个 自定义 自定义 类并给它命名。 根据 https //relay dev/docs/en/graphql server specification#schema , 我创建了类 faction、ship 和其他类,具有匹配的属性,但您可以创建自己的类以遵循此文档。只需相应地更改您的查询和变更。 请记住,按照约定,类名以大写字母开头,采用驼峰命名法,并且不包含空格和符号等特殊字符。 完成后点击 创建类 创建类 。 3 graphql 控制台 创建了您的类和属性后,您可以前往 api 控制台 api 控制台 然后 graphql 控制台 graphql 控制台 来执行您的查询和变更 4 查询 我们第一个查询将根据其 objectid objectid 来检索一个对象(不要与 id id 混淆)。 parse 已经发展,现在查询支持 objectid objectid , 以前称为 id id 在以前的版本中,但现在也支持 global id global id , 被称为 id id ,它指的是 relay 的全局 id,并且格式更长,因为它包含加密的类名 的示例 objectid objectid eat0ddk09v 的示例 id id (即全局 id): rmfjdglvbjpfyvqwzerrmdl2 让我们进行第一个查询,通过其 objectid objectid 来检索一个对象 1 query rebelsquery { 2 faction(id "eat0ddk09v") { 3 objectid #objectid for parse 4 id #globalid for relay 5 name #n 6 } 7 } 这将输出 1 { 2 "data" { 3 "faction" { 4 "objectid" "eat0ddk09v", 5 "id" "rmfjdglvbjpfyvqwzerrmdl2", 6 "name" "galactic empire" 7 } 8 } 9 } 现在,让我们将其更改为relay的globalid 1 query rebelsquery { 2 faction(id "rmfjdglvbjpfyvqwzerrmdl2") { 3 objectid #objectid for parse 4 id #globalid for relay 5 name #n 6 } 7 } 请注意,结果将是相同的 1 { 2 "data" { 3 "faction" { 4 "objectid" "eat0ddk09v", 5 "id" "rmfjdglvbjpfyvqwzerrmdl2", 6 "name" "galactic empire" 7 } 8 } 9 } 这发生是因为 全局 id 全局 id 的工作,如其名称所示,是全局的,并且其类名被加密在其中,因此 parse 知道在哪里搜索该 id。 5 重新获取 同样使用 全局 id 全局 id 你可以像 https //relay dev/docs/en/graphql server specification#object identification 如下预取 1 query refetchquery{ 2 node(id "rmfjdglvbjpfyvqwzerrmdl2"){ 3 id on faction{ 4 name 5 } 6 } 7 } 这将导致 1 { 2 "data" { 3 "node" { 4 "id" "rmfjdglvbjpfyvqwzerrmdl2", 5 "name" "galactic empire" 6 } 7 } 8 } 6 连接 https //relay dev/docs/en/graphql server specification#connections 在parse中与graphql的工作方式相同,因此,如果您需要检索反抗军的飞船: 1 query rebelsshipsquery { 2 faction(id "rmfjdglvbjphctaznklsz2rq"){ 3 objectid 4 name 5 ships{ 6 edges{ 7 node{ 8 name 9 } 10 } 11 } 12 } 13 } 这将导致: 1 { 2 "data" { 3 "faction" { 4 "objectid" "aq036irgdp", 5 "name" "alliance to restore the republic", 6 "ships" { 7 "edges" \[ 8 { 9 "node" { 10 "name" "y wing" 11 } 12 }, 13 { 14 "node" { 15 "name" "x wing" 16 } 17 } 18 ] 19 } 20 } 21 } 22 } 您还可以检索第n艘飞船: 1 query rebelsshipsquery { 2 faction(id "rmfjdglvbjphctaznklsz2rq"){ 3 objectid 4 name 5 ships(first 1){ 6 edges{ 7 node{ 8 name 9 } 10 } 11 } 12 } 13 } 导致 1 { 2 "data" { 3 "faction" { 4 "objectid" "aq036irgdp", 5 "name" "alliance to restore the republic", 6 "ships" { 7 "edges" \[ 8 { 9 cursor 10 "node" { 11 "name" "y wing" 12 } 13 } 14 ] 15 } 16 } 17 } 18 } 或者在特定船只之后检索第 n 艘船,使用其游标值: 1 query rebelsshipsquery { 2 faction(id "rmfjdglvbjphctaznklsz2rq"){ 3 objectid 4 name 5 ships(first 1 after "yxjyyxljb25uzwn0aw9uoja"){ #cursor for the y wing ship 6 edges{ 7 cursor 8 node{ 9 name 10 } 11 } 12 } 13 } 14 } 这将检索: 1 { 2 "data" { 3 "faction" { 4 "objectid" "aq036irgdp", 5 "name" "alliance to restore the republic", 6 "ships" { 7 "edges" \[ 8 { 9 "cursor" "yxjyyxljb25uzwn0aw9uoje=", 10 "node" { 11 "name" "x wing" 12 } 13 } 14 ] 15 } 16 } 17 } 18 } 7 变更 我们还可以使用与 https //relay dev/docs/en/graphql server specification#mutations 让我们创建一个新的 船 船 1 mutation createbwing($input createshipinput!){ 2 createship(input $input){ 3 ship{ 4 id 5 name 6 } 7 } 8 } 这需要以下查询变量 1 { 2 "input" { 3 "fields" { 4 "name" "b wing" 5 } 6 } 7 } 并将返回 全局id 全局id 和 名称 名称 如变更中所指定 1 { 2 "data" { 3 "createship" { 4 "ship" { 5 "id" "u2hpcdpxb21qznvzexvf", 6 "name" "b wing" 7 } 8 } 9 } 10 }