Docs
Vyhledávání⌘ K
  • Domov
  • O Grafu
  • Podporované sítě
  • Protocol Contracts
  • Podgrafy
    • Substreams
      • Token API
        • AI Suite
          • Indexing
            • Resources
              Resources > Migration Guides

              7 minutes

              GraphQL Validations Migration Guide

              Brzy bude graph-node podporovat 100% pokrytí GraphQL Validations specifikace⁠.

              Předchozí verze graph-node nepodporovaly všechny validace a neposkytovaly šetrnější odpovědi - v případě nejednoznačnosti tak graph-node ignoroval neplatné komponenty operací GraphQL.

              Podpora ověřování GraphQL je pilířem pro nadcházející nové funkce a výkon v měřítku Síť Graph.

              Zajistí také determinismus odpovědí na dotazy, což je klíčový požadavek sítě Graf.

              Povolení ověřování GraphQL naruší některé existující dotazy odeslané do Grafu API.

              Chcete-li být v souladu s těmito validacemi, postupujte podle průvodce migrací.

              ⚠️ Pokud neprovedete migraci dotazů před zavedením validací, budou vracet chyby a možná rozbijí vaše frontends/klienty.

              Průvodce migrací

              Pomocí migračního nástroje CLI můžete najít případné problémy v operacích GraphQL a opravit je. Případně můžete aktualizovat koncový bod svého klienta GraphQL tak, aby používal koncový bod https://api-next.thegraph.com/subgraphs/name/$GITHUB_USER/$SUBGRAPH_NAME. Testování dotazů proti tomuto koncovému bodu vám pomůže najít problémy ve vašich dotazech.

              Not all Subgraphs will need to be migrated, if you are using GraphQL ESlint⁠ or GraphQL Code Generator⁠, they already ensure that your queries are valid.

              Migrační nástroj CLI

              Většinu chyb při operacích GraphQL můžete najít ve své kódové základně předem.

              Z tohoto důvodu poskytujeme hladký průběh ověřování operací GraphQL během vývoje nebo v CI.

              @graphql-validate/cli⁠ je jednoduchý nástroj CLI, který pomáhá ověřovat operace GraphQL proti danému schéma.

              začínáme

              Nástroj můžete spustit následujícím způsobem:

              1npx @graphql-validate/cli -s https://api-next.thegraph.com/subgraphs/name/$GITHUB_USER/$SUBGRAPH_NAME -o *.graphql

              Poznámky:

              • Nastavte nebo nahraďte $GITHUB_USER, $SUBGRAPH_NAME příslušnými hodnotami. Jako např: artblocks/art-blocks⁠
              • Poskytnutá adresa URL náhledového schématu (https://api-next.thegraph.com/⁠) je silně omezená a po přechodu všech uživatelů na novou verzi bude ukončena. Nepoužívejte jej v produkčním provozu
              • Operace jsou identifikovány v souborech s následujícími příponami .graphql,⁠.ts, .tsx, .js, jsx⁠ (-o option).

              Výstup CLI

              Nástroj [@graphql-validate/cli](https://github.com/saihaj/graphql-validate) CLI vypíše všechny chyby operací GraphQL takto:

              Error output from CLI

              U každé chyby naleznete popis, cestu a pozici souboru a odkaz na příklad řešení (viz následující část).

              Spouštění místních dotazů proti schéma náhledu

              Poskytujeme koncový bod https://api-next.thegraph.com/, který spouští verzi graph-node se zapnutými validacemi.

              Dotazy si můžete vyzkoušet zasláním na:

              • https://api-next.thegraph.com/subgraphs/id/<Qm...>

              nebo

              • https://api-next.thegraph.com/subgraphs/name/<GITHUB_USER>/<SUBGRAPH_NAME>

              Chcete-li pracovat s dotazy, které byly označeny jako dotazy s chybami validace, můžete použít svůj oblíbený nástroj pro dotazy GraphQL, například Altair nebo GraphiQL⁠, a vyzkoušet svůj dotaz. Tyto nástroje také tyto chyby označí ve svém uživatelském rozhraní, a to ještě předtím, než jej spustíte.

              Jak řešit problémy

              Níže naleznete všechny chyby validace GraphQL, které se mohou vyskytnout u vašich stávajících operací GraphQL.

              Proměnné, operace, fragmenty nebo argumenty jazyka GraphQL musí být jedinečné

              Použili jsme pravidla pro zajištění toho, aby operace obsahovala jedinečnou sadu proměnných GraphQL, operací, fragmentů a argumentů.

              Operace GraphQL je platná pouze tehdy, pokud neobsahuje žádnou nejednoznačnost.

              Abychom toho dosáhli, musíme zajistit, aby některé součásti operace GraphQL byly jedinečné.

              Zde je příklad několika neplatných operací, které porušují tato pravidla:

              Duplicitní název dotazu (#UniqueOperationNamesRule)

              1# The following operation violated the UniqueOperationName2# rule, since we have a single operation with 2 queries3# with the same name4query myData {5  id6}78query myData {9  name10}

              Řešení:

              1query myData {2  id3}45query myData2 {6  # rename the second query7  name8}

              Duplicitní název fragmentu (#UniqueFragmentNamesRule)

              1# The following operation violated the UniqueFragmentName2# rule.3query myData {4  id5  ...MyFields6}78fragment MyFields {9  metadata10}1112fragment MyFields {13  name14}

              Řešení:

              1query myData {2  id3  ...MyFieldsName4  ...MyFieldsMetadata5}67fragment MyFieldsMetadata { # assign a unique name to fragment8  metadata9}1011fragment MyFieldsName { # assign a unique name to fragment12  name13}

              Duplicitní název proměnné (#UniqueVariableNamesRule)

              1# The following operation violates the UniqueVariables2query myData($id: String, $id: Int) {3  id4  ...MyFields5}

              Řešení:

              1query myData($id: String) {2  # keep the relevant variable (here: `$id: String`)3  id4  ...MyFields5}

              Duplicate argument name (#UniqueArgument)

              1# The following operation violated the UniqueArguments2query myData($id: ID!) {3  userById(id: $id, id: "1") {4    id5  }6}

              Řešení:

              1query myData($id: ID!) {2  userById(id: $id) {3    id4  }5}

              Duplicitní anonymní dotaz (#LoneAnonymousOperationRule)

              Použitím dvou anonymních operací se také poruší pravidlo LoneAnonymousOperation kvůli konfliktu ve struktuře odpovědi:

              1# This will fail if executed together in2# a single operation with the following two queries:3query {4  someField5}67query {8  otherField9}

              Řešení:

              1query {2  someField3  otherField4}

              Nebo tyto dva dotazy pojmenujte:

              1query FirstQuery {2  someField3}45query SecondQuery {6  otherField7}

              Překrývající pole

              Výběrová sada GraphQL je považována za platnou, pouze pokud správně řeší případnou sadu výsledků.

              Pokud konkrétní výběrová sada nebo pole způsobí nejednoznačnost buď vybraného pole, nebo použitých argumentů, služba GraphQL operaci neověří.

              Zde je několik příkladů neplatných operací, které toto pravidlo porušují:

              Překrývající se aliasy polí (#OverlappingFieldsCanBeMergedRule)

              1# Aliasing fields might cause conflicts, either with2# other aliases or other fields that exist on the3# GraphQL schema.4query {5  dogs {6    name: nickname7    name8  }9}

              Řešení:

              1query {2  dogs {3    name: nickname4    originalName: name # alias the original `name` field5  }6}

              Konfliktní pole s argumenty (#OverlappingFieldsCanBeMergedRule)

              1# Different arguments might lead to different data,2# so we can't assume the fields will be the same.3query {4  dogs {5    doesKnowCommand(dogCommand: SIT)6    doesKnowCommand(dogCommand: HEEL)7  }8}

              Řešení:

              1query {2  dogs {3    knowsHowToSit: doesKnowCommand(dogCommand: SIT)4    knowsHowToHeel: doesKnowCommand(dogCommand: HEEL)5  }6}

              Ve složitějších případech použití můžete toto pravidlo porušit také použitím dvou fragmentů, které by mohly způsobit konflikt v očekávané sadě:

              1query {2  # Eventually, we have two "x" definitions, pointing3  # to different fields!4  ...A5  ...B6}78fragment A on Type {9  x: a10}1112fragment B on Type {13  x: b14}

              Kromě toho mohou vést k nejasnostem například direktivy GraphQL na straně klienta jako @skip a @include:

              1fragment mergeSameFieldsWithSameDirectives on Dog {2  name @include(if: true)3  name @include(if: false)4}

              Více informací o algoritmu najdete zde.⁠

              Nepoužívané proměnné nebo fragmenty

              Operace GraphQL je také považována za platnou, pouze pokud jsou použity všechny součásti definované operací (proměnné, fragmenty).

              Zde je několik příkladů operací GraphQL, které tato pravidla porušují:

              Nepoužitá proměnná (#NoUnusedVariablesRule)

              1# Invalid, because $someVar is never used.2query something($someVar: String) {3  someData4}

              Řešení:

              1query something {2  someData3}

              Nepoužitý fragment(#NoUnusedFragmentsRule)

              1# Invalid, because fragment AllFields is never used.2query something {3  someData4}56fragment AllFields { # unused :(7  name8  age9}

              Řešení:

              1# Invalid, because fragment AllFields is never used.2query something {3  someData4}56# remove the `AllFields` fragment

              Neplatná nebo chybějící výběrová sada (#ScalarLeafsRule)

              Výběr pole GraphQL je také platný pouze v případě, že je potvrzeno následující:

              • Pole objektu musí mít zadanou výběrovou sadu.
              • Okrajové pole (skalár, enum) nesmí mít zadanou výběrovou sadu.

              Zde je několik příkladů porušení těchto pravidel s následujícím schématem:

              1type Image {2  url: String!3}45type User {6  id: ID!7  avatar: Image!8}910type Query {11  user: User!12}

              Neplatná výběrová sada

              1query {2  user {3    id { # Invalid, because "id" is of type ID and does not have sub-fields45    }6  }7}

              Řešení:

              1query {2  user {3    id4  }5}

              Chybějící výběrová sada

              1query {2  user {3    id4    image # `image` requires a Selection-Set for sub-fields!5  }6}

              Řešení:

              1query {2  user {3    id4    image {5      src6    }7  }8}

              Nesprávné hodnoty argumentů (#VariablesInAllowedPositionRule)

              Operace GraphQL, které předávají pevně zadané hodnoty argumentů, musí být platné na základě hodnoty definované ve schéma.

              Zde je několik příkladů neplatných operací, které porušují tato pravidla:

              1query purposes {2  # If "name" is defined as "String" in the schema,3  # this query will fail during validation.4  purpose(name: 1) {5    id6  }7}89# This might also happen when an incorrect variable is defined:1011query purposes($name: Int!) {12  # If "name" is defined as `String` in the schema,13  # this query will fail during validation, because the14  # variable used is of type `Int`15  purpose(name: $name) {16    id17  }18}

              Neznámý typ, proměnná, fragment nebo směrnice (#UnknownX)

              Pokud je použit neznámý typ, proměnná, fragment nebo direktiva, rozhraní GraphQL API vyhodí chybu.

              Tyto neznámé odkazy je třeba opravit:

              • přejmenovat, pokud se jedná o překlep
              • v opačném případě odstraňte

              Fragment: neplatné rozšíření nebo definice

              Neplatné rozložení fragmentů (#PossibleFragmentSpreadsRule)

              Fragment nelze rozložit na nepoužitelný typ.

              Příklad: fragment Kočka nemůžeme použít na typ Pes:

              1query {2	dog {3		...CatSimple4  }5}67fragment CatSimple on Cat {8  # ...9}

              Neplatná definice fragmentu (#FragmentsOnCompositeTypesRule)

              Všechny fragmenty musí být definovány na (pomocí on ...) složeném typu, zkráceně: objektu, rozhraní nebo svazu.

              Následující příklady jsou neplatné, protože definování fragmentů na skalárech je neplatné.

              1fragment fragOnScalar on Int {2  # we cannot define a fragment upon a scalar (`Int`)3  something4}56fragment inlineFragOnScalar on Dog {7  ... on Boolean {8    # `Boolean` is not a subtype of `Dog`9    somethingElse10  }11}

              Použití směrnic

              Direktiv nelze na tomto místě použít (#KnownDirectivesRule)

              Lze použít pouze direktivy GraphQL (@...) podporované Graf API.

              Zde je příklad s direktivami podporovanými GraphQL:

              1query {2  dog {3    name @include(true)4    age @skip(true)5  }6}

              Poznámka: @stream, @live, @defer nejsou podporovány.

              Direktiv lze v tomto umístění použít pouze jednou (#UniqueDirectivesPerLocationRule)

              Směrnice podporované nástrojem Grafu lze v jednom umístění použít pouze jednou.

              Následující text je neplatný (a nadbytečný):

              1query {2  dog {3    name @include(true) @include(true)4  }5}
              ⁠Edit on GitHub⁠

              Průvodce migrací AssemblyScriptFAQs Podgraf Studio
              On this page
              • Průvodce migrací
              • Migrační nástroj CLI
              • začínáme
              • Výstup CLI
              • Spouštění místních dotazů proti schéma náhledu
              • Jak řešit problémy
              • Proměnné, operace, fragmenty nebo argumenty jazyka GraphQL musí být jedinečné
              • Překrývající pole
              • Nepoužívané proměnné nebo fragmenty
              • Neplatná nebo chybějící výběrová sada (#ScalarLeafsRule)
              • Nesprávné hodnoty argumentů (#VariablesInAllowedPositionRule)
              • Neznámý typ, proměnná, fragment nebo směrnice (#UnknownX)
              • Fragment: neplatné rozšíření nebo definice
              • Použití směrnic
              The GraphStatusTestnetBrand AssetsForumSecurityPrivacy PolicyTerms of Service