Docs
Arama⌘ K
  • Ana sayfa
  • Graph Hakkında
  • Desteklenen Ağlar
  • Protocol Contracts
  • Subgraph'ler
    • Substream'ler
      • Token API
        • AI Suite
          • Endeksleme
            • Kaynaklar
              Kaynaklar > Migration Guides

              7 dakika

              GraphQL Validations Migration Guide

              Yakında “graph-node”, GraphQL Validasyon Özelliklerinin⁠’in %100’ünü destekleyecektir.

              “graph-node”un önceki sürümleri tüm doğrulamaları desteklemiyordu ve daha zarif yanıtlar veriyordu - bu nedenle, belirsizlik durumlarında “graph-node” geçersiz GraphQL işlem bileşenlerini görmezden geliyordu.

              GraphQL validasyon desteği, yaklaşan yeni özelliklerin ve Graph Ağı ölçeğindeki performansın temel direğidir.

              Ayrıca, Graph ağında önemli bir gereklilik olan sorgu yanıtlarının belirleyiciliğini de sağlayacaktır.

              GraphQL validasyonlarını etkinleştirmek, Graph API’ye gönderilen bazı mevcut sorguları bozacaktır.

              Bu doğrulamalarla uyumlu olmak için lütfen taşıma kılavuzunu takip edin.

              ⚠️ Doğrulamalar kullanıma sunulmadan önce sorgularınızı taşımazsanız, bunlar hata döndürecek ve muhtemelen ön uçlarınızı/istemcilerinizi bozacaktır.

              Taşıma Kılavuzu

              GraphQL işlemlerinizdeki sorunları bulmak ve düzeltmek için CLI taşıma aracını kullanabilirsiniz. Alternatif olarak, https://api-next.thegraph.com/subgraphs/name/$GITHUB_USER/$SUBGRAPH_NAME uç noktasını kullanmak için GraphQL istemcinizin uç noktasını güncelleyebilirsiniz. Sorgularınızı bu uç noktaya göre test etmek, sorgularınızdaki sorunları bulmanıza yardımcı olacaktır.

              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.

              Geçiş CLI Aracı

              GraphQL işlem hatalarının çoğu kod tabanınızda önceden bulunabilir.

              Bu nedenle, geliştirme sırasında veya CI’de GraphQL işlemlerinizi doğrulamak için sorunsuz bir deneyim sağlıyoruz.

              @graphql-validate/cli⁠, GraphQL işlemlerini belirli bir şemaya göre doğrulamaya yardımcı olan basit bir CLI aracıdır.

              Başlarken

              Aracı aşağıdaki gibi çalıştırabilirsiniz:

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

              Notlar:

              • $GITHUB_USER, $SUBGRAPH_NAME değerini uygun değerlerle ayarlayın veya değiştirin. artblocks/art-blocks⁠ gibi.
              • Sağlanan önizleme şeması URL’si (https://api-next.thegraph.com/⁠) büyük oranda hız sınırlamasına sahiptir ve tüm kullanıcılar yeni sürüme geçtikten sonra kullanımdan kaldırılacaktır. Çıktıda kullanmayın.
              • İşlemler, aşağıdaki .graphql,⁠.ts, .tsx, .js, jsx⁠ (-o option) uzantılarına sahip dosyalarda tanımlanır.

              CLI Çıktısı

              [@graphql-validate/cli](https://github.com/saihaj/graphql-validate) CLI aracı, tüm GraphQL işlemleri hatalarını aşağıdaki gibi verir:

              Error output from CLI

              Her hata için bir açıklama, dosya yolu ve konumu ve bir çözüm örneğine bağlantı bulacaksınız (aşağıdaki bölüme göz atın).

              Yerel sorgularınızı önizleme şemasına göre çalıştırın

              Doğrulamaların açık olduğu bir “Graph Node” sürümünü çalıştıran bir uç nokta https://api-next.thegraph.com/ sağlıyoruz.

              Sorguları şu adrese göndererek deneyebilirsiniz:

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

              yada

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

              Doğrulama hataları içerdiği işaretlenen sorgular üzerinde çalışmak için Altair veya GraphiQL⁠ gibi en sevdiğiniz GraphQL sorgulama aracını kullanabilir ve sorgunuzu deneyebilirsiniz. Bu araçlar, siz çalıştırmadan önce bile kullanıcı arayüzlerinde bu hataları işaretleyecektir.

              Sorunları nasıl çözeceğiz?

              Aşağıda, mevcut GraphQL işlemlerinizde meydana gelebilecek tüm GraphQL doğrulama hatalarını bulacaksınız.

              GraphQL değişkenleri, işlemleri, parçaları veya bağımsız değişkenleri benzersiz olmalıdır

              Bir işlemin benzersiz bir GraphQL değişkenleri, işlemler, parçalar ve bağımsız değişkenler kümesi içermesini sağlamak için kurallar uyguladık.

              Bir GraphQL işlemi, yalnızca herhangi bir belirsizlik içermiyorsa geçerlidir.

              Bunu başarmak için, GraphQL işleminizdeki bazı bileşenlerin benzersiz olmasını sağlamamız gerekiyor.

              Aşağıda, bu kuralları ihlal eden birkaç geçersiz işleme örnek verilmiştir:

              Yinelenen Sorgu Adı (#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}

              Solution:

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

              Duplicate Fragment name (#UniqueFragmentNamesRule)

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

              Solution:

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

              Duplicate variable name (#UniqueVariableNamesRule)

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

              Solution:

              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}

              Solution:

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

              Duplicate anonymous query (#LoneAnonymousOperationRule)

              Ayrıca, iki anonim işlemin kullanılması, yanıt yapısındaki çakışma nedeniyle LoneAnonymousOperation kuralını ihlal edecektir:

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

              Solution:

              1query {2  someField3  otherField4}

              Veya iki sorguyu adlandırın:

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

              Çakışan Alanlar

              Bir GraphQL seçim seti, yalnızca nihai sonuç setini doğru bir şekilde çözerse geçerli kabul edilir.

              Belirli bir seçim kümesi veya bir alan, seçilen alan veya kullanılan bağımsız değişkenler nedeniyle belirsizlik yaratırsa, GraphQL hizmeti işlemi doğrulamada başarısız olur.

              Bu kuralı ihlal eden geçersiz işlemlere birkaç örnek:

              Conflicting fields aliases (#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}

              Solution:

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

              Conflicting fields with arguments (#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}

              Solution:

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

              Ayrıca, daha karmaşık kullanım durumlarında, sonunda beklenen kümede bir çakışmaya neden olabilecek iki parça kullanarak bu kuralı ihlal edebilirsiniz:

              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}

              Buna ek olarak, “@skip” ve “@include” gibi müşteri tarafı GraphQL yönergeleri belirsizliğe yol açabilir, örneğin:

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

              Algoritma hakkında daha fazla bilgiyi buradan edinebilirsiniz.⁠

              Kullanılmayan Değişkenler veya Parçalar

              Bir GraphQL işlemi, yalnızca tüm işlem tanımlı bileşenler (değişkenler, parçalar) kullanılıyorsa geçerli kabul edilir.

              İşte bu kuralları ihlal eden GraphQL işlemleri için birkaç örnek:

              Kullanılmayan Değişken (#NoUnusedVariablesRule)

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

              Solution:

              1query something {2  someData3}

              Unused Fragment (#NoUnusedFragmentsRule)

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

              Solution:

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

              Geçersiz veya Eksik Seçim Kümesi (#ScalarLeafsRule)

              Ayrıca, bir GraphQL alan seçimi yalnızca aşağıdakiler doğrulanırsa geçerlidir:

              • Bir nesne alanında olması gereken seçim kümesi belirtildi.
              • Bir kenar alanı (scalar, enum) belirtilen bir seçim kümesine sahip olmamalıdır.

              Aşağıda, aşağıdaki şema ile bu kuralların ihlaline ilişkin birkaç örnek verilmiştir:

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

              Invalid Selection-Set

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

              Solution:

              1query {2  user {3    id4  }5}

              Missing Selection-Set

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

              Solution:

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

              Yanlış Bağımsız Değişken Değerleri (#VariablesInAllowedPositionRule)

              Sabit kodlu değerleri bağımsız değişkenlere ileten GraphQL işlemleri, şemada tanımlanan değere göre geçerli olmalıdır.

              Aşağıda, bu kuralları ihlal eden geçersiz işlemlere ilişkin birkaç örnek verilmiştir:

              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# Bu, yanlış bir değişken tanımlandığında da olabilir: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}

              Bilinmeyen Tür, Değişken, Parça veya Yönerge (#UnknownX)

              Herhangi bir bilinmeyen tür, değişken, parça veya yönerge kullanılırsa GraphQL API bir hata verir.

              Bu bilinmeyen referanslar düzeltilmelidir:

              • bir yazım hatasıysa yeniden adlandır
              • aksi halde kaldır

              Parça: Geçersiz Yayılma Veya Tanım

              Geçersiz Parça Yayılması (#PossibleFragmentSpreadsRule)

              Bir parça, geçerli olmayan bir türe yayılamaz.

              Örnek olarak, “Dog” türüne bir “Cat” parçası uygulayamayız:

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

              Geçersiz Fragment Tanımı (#FragmentsOnCompositeTypesRule)

              Tüm parçalar (‘on …’ kullanılarak) bir bileşik tipte tanımlanmalıdır, kısacası: nesne, arayüz veya birleşim.

              Aşağıdaki örnekler geçersizdir, çünkü skalerler üzerinde parça tanımlama geçersizdir.

              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}

              Direktif kullanımı

              Yönerge bu konumda kullanılamaz (#KnownDirectivesRule)

              Yalnızca Graph API tarafından desteklenen GraphQL yönergeleri (”@…”) kullanılabilir.

              İşte GraphQL tarafından desteklenen direktiflere bir örnek:

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

              Not: @stream, @live, @defer desteklenmez.

              Yönerge bu konumda yalnızca bir kez kullanılabilir (#UniqueDirectivesPerLocationRule)

              Graph tarafından desteklenen direktifler, lokasyon başına sadece bir kez kullanılabilir.

              Aşağıdakiler geçersiz (ve gereksiz):

              1query {2  dog {3    name @include(true) @include(true)4  }5}
              ⁠GitHub'da Düzenle⁠

              AssemblyScript Geçiş RehberiSubgrap Studio Hakkında SSS
              Bu sayfada
              • Taşıma Kılavuzu
              • Geçiş CLI Aracı
              • Başlarken
              • CLI Çıktısı
              • Yerel sorgularınızı önizleme şemasına göre çalıştırın
              • Sorunları nasıl çözeceğiz?
              • GraphQL değişkenleri, işlemleri, parçaları veya bağımsız değişkenleri benzersiz olmalıdır
              • Çakışan Alanlar
              • Kullanılmayan Değişkenler veya Parçalar
              • Geçersiz veya Eksik Seçim Kümesi (#ScalarLeafsRule)
              • Yanlış Bağımsız Değişken Değerleri (#VariablesInAllowedPositionRule)
              • Bilinmeyen Tür, Değişken, Parça veya Yönerge (#UnknownX)
              • Parça: Geçersiz Yayılma Veya Tanım
              • Direktif kullanımı
              The GraphStatusTestnetBrand AssetsForumSecurityPrivacy PolicyTerms of Service