Parse 3.10 Kompatibilität mit Relay für Entwickler
15 min
relay kompatibilität einführung die parse server graphql api folgt den neuesten standards, die derzeit für hochskalierbare apis und ehrgeizige front end projekte verfügbar sind das parse open source team hat sich entschieden, die graphql server relay https //relay dev/docs/en/graphql server specification spezifikation zu befolgen relay ist ein javascript framework zum erstellen von datengetriebenen react anwendungen, die von graphql unterstützt werden es wurde von grund auf so konzipiert, dass es einfach zu bedienen, erweiterbar und vor allem leistungsfähig ist relay erreicht dies mit statischen abfragen und der code generierung zur compile zeit ab parse 3 10 wird vollständige kompatibilität mit relay https //relay dev/docs/en/graphql server specification implementiert dieses dokument wird sie durch diese implementierungen führen voraussetzungen um mit diesem tutorial zu beginnen, benötigen sie eine app, die bei back4app erstellt wurde siehe das tutorial zum erstellen einer neuen app https //www back4app com/docs/get started/new parse app , um zu lernen, wie man eine app bei back4app erstellt 1 erstellen sie eine neue back4app app zunächst ist es notwendig, sicherzustellen, dass sie eine vorhandene app bei back4app erstellt haben wenn sie jedoch ein neuer benutzer sind, können sie dieses tutorial https //www back4app com/docs/get started/new parse app überprüfen, um zu lernen, wie man eine erstellt 2 erstellen sie einige klassen gehen sie in ihrer neu erstellten app zum \<font color="#2166ae">datenbank browser\</font> und klicken sie auf die \<font color="#2166ae">klasse erstellen\</font> schaltfläche wählen sie aus, eine \<font color="#2166ae">benutzerdefinierte\</font> klasse zu erstellen und geben sie ihr einen namen folgend dem relay beispielschema https //relay dev/docs/en/graphql server specification#schema , habe ich die klassen faction, ship und andere mit entsprechenden eigenschaften erstellt, aber sie können ihre klassen erstellen, um dieser dokumentation zu folgen ändern sie einfach ihre abfragen und mutationen entsprechend denken sie daran, dass klassen konventionell mit einem großbuchstaben beginnen, camelcase sind und keine sonderzeichen wie leerzeichen und symbole enthalten klicken sie auf \<font color="#2166ae">klasse erstellen\</font> , wenn sie fertig sind 3 graphql konsole mit ihren klassen und eigenschaften erstellt, können sie zur \<font color="#2166ae">api konsole\</font> und dann zur \<font color="#2166ae">graphql konsole\</font> gehen, um ihre abfragen und mutationen auszuführen 4 abfragen unsere erste abfrage wird ein objekt basierend auf seiner \<font color="#2166ae">objectid\</font> abrufen (nicht zu verwechseln mit \<font color="#2166ae">id\</font> ) parse hat sich weiterentwickelt und jetzt unterstützen abfragen sowohl \<font color="#2166ae">objectid\</font> , früher bekannt als \<font color="#2166ae">id\</font> in früheren versionen, unterstützt jetzt aber auch \<font color="#2166ae">global id\</font> , bekannt als \<font color="#2166ae">id\</font> , das sich auf relays globale id bezieht und ein längeres format hat, da es den klassennamen verschlüsselt enthält beispiel für \<font color="#2166ae">objectid\</font> eat0ddk09v beispiel für \<font color="#2166ae"> id\</font> (auch bekannt als globale id) rmfjdglvbjpfyvqwzerrmdl2 lassen sie uns unsere erste abfrage erstellen, um ein objekt anhand seiner \<font color="#2166ae">objectid\</font> 1 query rebelsquery { 2 faction(id "eat0ddk09v") { 3 objectid #objectid for parse 4 id #globalid for relay 5 name #n 6 } 7 } das wird ausgegeben 1 { 2 "data" { 3 "faction" { 4 "objectid" "eat0ddk09v", 5 "id" "rmfjdglvbjpfyvqwzerrmdl2", 6 "name" "galactic empire" 7 } 8 } 9 } jetzt ändern wir das für die globalid für relay 1 query rebelsquery { 2 faction(id "rmfjdglvbjpfyvqwzerrmdl2") { 3 objectid #objectid for parse 4 id #globalid for relay 5 name #n 6 } 7 } und beachten sie, dass das ergebnis dasselbe sein wird 1 { 2 "data" { 3 "faction" { 4 "objectid" "eat0ddk09v", 5 "id" "rmfjdglvbjpfyvqwzerrmdl2", 6 "name" "galactic empire" 7 } 8 } 9 } dies geschieht, weil die \<font color="#2166ae">globale id\</font> funktioniert, wie der name schon sagt, global und hat den klassennamen darin verschlüsselt, sodass parse weiß, wo es nach dieser id suchen soll 5 erneutes abrufen auch mit der \<font color="#2166ae">globale id\</font> können sie vorab abrufen wie relays spezifikation https //relay dev/docs/en/graphql server specification#object identification wie folgt 1 query refetchquery{ 2 node(id "rmfjdglvbjpfyvqwzerrmdl2"){ 3 id on faction{ 4 name 5 } 6 } 7 } was zu folgendem ergebnis führt 1 { 2 "data" { 3 "node" { 4 "id" "rmfjdglvbjpfyvqwzerrmdl2", 5 "name" "galactic empire" 6 } 7 } 8 } 6 verbindungen die verbindungen von relay https //relay dev/docs/en/graphql server specification#connections funktionieren auf die gleiche weise in parse mit graphql, also, wenn sie die schiffe der rebellen abrufen müssen 1 query rebelsshipsquery { 2 faction(id "rmfjdglvbjphctaznklsz2rq"){ 3 objectid 4 name 5 ships{ 6 edges{ 7 node{ 8 name 9 } 10 } 11 } 12 } 13 } was folgendes ergibt 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 } sie können auch die n ten schiffe abrufen 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 } was zu folgendem führt 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 } oder rufen sie das n te schiff nach einem bestimmten, unter verwendung seines cursor wertes ab 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 } was abgerufen wird 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 mutationen wir können auch mutationen verwenden, die mit relay mutationen https //relay dev/docs/en/graphql server specification#mutations lassen sie uns ein neues \<font color="#2166ae">schiff\</font> 1 mutation createbwing($input createshipinput!){ 2 createship(input $input){ 3 ship{ 4 id 5 name 6 } 7 } 8 } das benötigt die folgende abfragevariable 1 { 2 "input" { 3 "fields" { 4 "name" "b wing" 5 } 6 } 7 } und wird die \<font color="#2166ae">globale id\</font> und \<font color="#2166ae">name\</font> zurückgeben, wie in der mutation angegeben 1 { 2 "data" { 3 "createship" { 4 "ship" { 5 "id" "u2hpcdpxb21qznvzexvf", 6 "name" "b wing" 7 } 8 } 9 } 10 }