Полная реализация 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 смотрите руководство по созданию нового приложения 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 создайте несколько классов в вашем вновь созданном приложении перейдите в \<font color="#2166ae">обозреватель базы данных\</font> и нажмите кнопку \<font color="#2166ae">создать класс\</font> выберите создание \<font color="#2166ae">пользовательского\</font> класса и дайте ему имя следуя примеру схемы relay https //relay dev/docs/en/graphql server specification#schema , я создал классы фракция, корабль и другие, как описано с соответствующими свойствами, но вы можете создать свои классы в соответствии с этой документацией просто измените свои запросы и мутации соответственно помните, что по соглашению классы начинаются с заглавной буквы, написаны в camelcase и не содержат специальных символов, таких как пробелы и символы нажмите \<font color="#2166ae">создать класс\</font> когда закончите 3 консоль graphql создав ваши классы и свойства, вы можете перейти к \<font color="#2166ae">консоли api\</font> и затем \<font color="#2166ae">консоли graphql\</font> , чтобы выполнять ваши запросы и мутации 4 запросы наш первый запрос будет извлекать объект на основе его \<font color="#2166ae">objectid\</font> (не путать с \<font color="#2166ae">id\</font> ) parse развивался, и теперь запросы поддерживают как \<font color="#2166ae">objectid\</font> , ранее известный как \<font color="#2166ae">id\</font> в предыдущих версиях, но теперь также поддерживает \<font color="#2166ae">global id\</font> , известный как \<font color="#2166ae">id\</font> , который относится к глобальному id relay и имеет более длинный формат, так как содержит зашифрованное имя класса пример \<font color="#2166ae">objectid\</font> eat0ddk09v пример \<font color="#2166ae"> id\</font> (также известный как global id) rmfjdglvbjpfyvqwzerrmdl2 давайте сделаем наш первый запрос, извлекая объект по его \<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 } это будет выводить 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 } это происходит потому, что \<font color="#2166ae">глобальный идентификатор\</font> работает, как подразумевает его название, глобально, и имеет имя класса, зашифрованное в нем, поэтому parse знает, где искать этот идентификатор 5 повторный запрос также с \<font color="#2166ae">глобальным идентификатором\</font> вы можете предварительно загрузить, как в спецификации 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 давайте создадим новый \<font color="#2166ae">корабль\</font> 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 } и вернет \<font color="#2166ae">глобальный id\</font> и \<font color="#2166ae">имя\</font> как указано в мутации 1 { 2 "data" { 3 "createship" { 4 "ship" { 5 "id" "u2hpcdpxb21qznvzexvf", 6 "name" "b wing" 7 } 8 } 9 } 10 }