Advanced Guides
Полная реализация Relay в Parse 3.10+ для разработчиков
15 мин
совместимость с relay введение api graphql сервера parse следует последним стандартам, доступным для высокомасштабируемых api и амбициозных фронтенд проектов команда parse open source выбрала следовать спецификации сервера graphql relay https //relay dev/docs/en/graphql server specification relay — это javascript фреймворк для создания приложений react, управляемых данными, работающих на graphql, разработанный с нуля, чтобы быть простым в использовании, расширяемым и, прежде всего, производительным relay достигает этого с помощью статических запросов и генерации кода заранее начиная с parse 3 10, полная совместимость с relay https //relay dev/docs/en/graphql server specification реализована этот документ проведет вас через эти реализации предварительные требования для начала этого руководства вам потребуется приложение, созданное на back4app смотрите руководство по созданию нового приложения чтобы узнать, как создать приложение на back4app 1 создайте новое приложение back4app прежде всего, необходимо убедиться, что у вас есть существующее приложение, созданное на back4app однако, если вы новый пользователь, вы можете ознакомиться с этим руководством https //www back4app com/docs/get started/new parse app чтобы узнать, как создать одно 2 создайте несколько классов в вашем вновь созданном приложении перейдите в обозреватель базы данных обозреватель базы данных и нажмите кнопку создать класс создать класс выберите создание пользовательского пользовательского класса и дайте ему имя следуя примеру схемы relay https //relay dev/docs/en/graphql server specification#schema , я создал классы фракция, корабль и другие, как описано с соответствующими свойствами, но вы можете создать свои классы в соответствии с этой документацией просто измените свои запросы и мутации соответственно помните, что по соглашению классы начинаются с заглавной буквы, написаны в camelcase и не содержат специальных символов, таких как пробелы и символы нажмите создать класс создать класс когда закончите 3 консоль graphql создав ваши классы и свойства, вы можете перейти к консоли api консоли api и затем консоли graphql консоли graphql , чтобы выполнять ваши запросы и мутации 4 запросы наш первый запрос будет извлекать объект на основе его objectid objectid (не путать с id id ) parse развивался, и теперь запросы поддерживают как objectid objectid , ранее известный как id id в предыдущих версиях, но теперь также поддерживает global id global id , известный как id id , который относится к глобальному id relay и имеет более длинный формат, так как содержит зашифрованное имя класса пример objectid objectid eat0ddk09v пример id id (также известный как global 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 } теперь давайте изменим это на globalid для relay 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 } это происходит потому, что глобальный идентификатор глобальный идентификатор работает, как подразумевает его название, глобально, и имеет имя класса, зашифрованное в нем, поэтому parse знает, где искать этот идентификатор 5 повторный запрос также с глобальным идентификатором глобальным идентификатором вы можете предварительно загрузить, как в спецификации relay 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 соединения соединения relay 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 мутации мы также можем использовать мутации, совместимые с мутациями relay 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 }