GraphQL API

GraphQL API, daha belirli ve esnek sorgular kullanarak tam olarak ihtiyacınız olan verileri almanızı sağlayan bir araçtır. GraphQL API’nin ana faydalarından biri, tek bir istek kullanarak birçok farklı kaynak elde edebilmenizdir.

Crowdin GraphQL API’sine karşı sorgu çalıştırmak istediğiniz durumlarda, yardımı ile uygulamanızda herhangi bir kod yazmadan önce bile Crowdin Enterprise web kullanıcı arayüzünden sorgular oluşturabileceğiniz, deneyebileceğiniz ve hata ayıklayabileceğiniz GraphQL Playground uygulamasını kullanmanızı öneririz.

Not: GraphQL API sedece Crowdin Enterprise ile kullanılabilir.

GraphQL API ile Yetkilendirme

Crowdin Enterprise’da GraphQL API ile çalışmak için aşağıdaki erişim belirteçlerinden birini kullanın:

İsteklerinizde aşağıdaki başlığı kullandığınızdan emin olun:

Yetkilendirme: Taşıyıcı <ACCESS_TOKEN>

Yetkilendirmenin başarısız olması durumunda yanıt:

401 Yetkisiz

{
  "error": {
    "message": "Yetkisiz",
    "code": 401
  }
}

Kök Uç Noktası

REST API’nin aksine, GraphQL API, gerçekleştirilen işlemlere bağlı olmaksızın sabit kalan sadece bir uç noktaya sahiptir.

GraphQL uç noktası:

https://{domain}.api.crowdin.com/api/graphql

Kaynak Sınırlamaları

Crowdin GraphQL API, Crowdin sunucularına aşırı veya kötüye kullanım amaçlı çağrıları önlemek için sınırlamalara sahiptir.

Düğüm Sınırı

Tüm GraphQL API çağrıları, şema doğrulamasını geçmek için aşağıdaki gereksinimlere uymak zorundadır:

  • Kullanıcılar, herhangi bir bağlantıda ilk veya son bağımsız değişkenini sağlamak zorundadır.
  • İlk ve son değerleri 1-10.000 arasında olmak zorundadır.
  • Bireysel çağrılar toplam 10.000’den fazla düğüm isteyemez.
Düğümleri Hesaplama

Aşağıdaki örneklerde, bir çağrıdaki düğümlerin nasıl hesaplandığını gözden geçirebilirsiniz.

  • Basit sorgu:

    query {
      viewer {
        projects(first: 50) {
          edges {
            node {
              name
    
              files(first: 10) {
                totalCount
                edges {
                  node {
                    name
                    type
                  }
                }
              }
            }
          }
        }
      }
    }
    

    Hesaplama:

    50         = 50 proje
    +
    50 x 10    = 500 dosya
    
               = 550 toplam düğüm
    
  • Karmaşık sorgu:

    query {
      viewer {
        projects(first: 50) {
          edges {
            node {
              files(first: 20) {
                edges {
                  node {
                    strings(first: 10) {
                      edges {
                        node {
                          ... on PlainSourceString {
                            text
                          }
                          ... on ICUSourceString {
                            text
                          }
                          ... on PluralSourceString {
                            plurals {
                              one
                              other
                            }
                          }
                          ... on AssetSourceString {
                            text
                          }
                        }
                      }
                    }
                  }
                }
              }
    
              translations(first: 20, languageId: "tr") {
                edges {
                  node {
                    ... on PlainStringTranslation {
                      text
                    }
                    ... on ICUStringTranslation {
                      text
                    }
                    ... on PluralStringTranslation {
                      pluralForm
                      text
                    }
                    ... on AssetStringTranslation {
                      text
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    

    Hesaplama:

    50           = 50 proje
    +
    50 x 20      = 1.000 dosya
    +
    50 x 20 x 10 = 10.000 dizgi
    +
    50 x 20      = 1.000 çeviri
    
                 = 12.050 toplam düğüm
    

Fiyat Sınırı

GraphQL API sınırı, REST API için ayarlanan fiyat sınırlarına kıyasla oldukça farklıdır.

Yukarıda bahsedildiği gibi, sadece bir GraphQL çağrısı kullanarak ve birden çok REST çağrısı yürütme ihtiyacını değiştirerek aynı miktarda veri alabilirsiniz. Tek bir karmaşık GraphQL çağrısı, binlerce REST isteğine eşdeğer olabilir ve REST API fiyat sınırını aşamazken, hesaplaması Crowdin sunucuları için aynı derecede pahalı olabilir.

GraphQL API, bir çağrının fiyat sınırı skorunu hesaplayarak bir sorgunun sunucu maliyetini tam olarak göstermek için normalleştirilmiş bir puan ölçeği kullanır. Bu skor, bir ana bağlantı ve alt bağlantısındaki ilk ve son bağımsız değişkenleri içerir.

  • Formül, MySQL ve ElasticSearch gibi Crowdin sistemlerinde olası yükü önceden belirlemek için bir ana bağlantı ve alt bağlantılarındaki ilk ve son bağımsız değişkenlerini kullanır.
  • Her yeni bağlantının kendi puan değeri vardır. Puanlar, son bir fiyat sınırı skoru oluşturmak için çağrının diğer puanlarına eklenir.

GraphQL API fiyat sınırı saatte 5.000 puana ayarlanmıştır. GraphQL API ve REST API farklı fiyat sınırları kullandığından, saatte 5.000 puan, saatte 5.000 çağrı ile aynı değildir.

Not: Şu anki hesaplama yöntemi ve fiyat sınırı sabit değildir ve gelecekte değiştirilebilir.
Bir Çağrının Fiyat Sınırı Durumunu Denetleme

GraphQL API’sini kullanırken fiyat sınırı durumunu denetlemek için rateLimit nesnesindeki alanları sorgulayın:

query {
  viewer {
    username
  }
  rateLimit {
    limit
    cost
    remaining
    resetAt
  }
}
  • limit – 60 dakikalık bir aralıkta kullanıcının tüketmesine izin verilen en fazla puan sayısını döndürür.
  • cost – fiyat sınırına göre şu anki çağrı için puan maliyetini döndürür.
  • remaining – şu anki fiyat sınırı aralığında kalan puan sayısını döndürür.
  • resetAt – UTC dönemi saniye cinsinden şu anki fiyat aralığının sıfırlandığı zamanı döndürür.
Çağrı Yürütmeden Önce Fiyat Sınırı Skorunu Tahmin Etme

rateLimit nesnesini sorgulamak size bir çağrının puanını verebilirken, sınıra göre sayılır. Bu duruma geçici bir çözüm bulmak için bir çağrının puanını önceden tahmin edebilirsiniz. Aşağıdaki hesaplamayı kullanarak, rateLimit { cost } tarafından döndürülen maliyetle yaklaşık olarak aynı maliyeti elde edebilirsiniz.

  1. İlk olarak, çağrıdaki her benzersiz bağlantıyı yerine getirmek için gereken istek sayısı toplanmalıdır. Her isteğin ilk veya son bağımsız değişken sınırlarına ulaşacağını varsayalım.
  2. Ardından, son birleşik maliyeti elde etmek için sayıyı 100’e bölmeniz ve sonucu yuvarlamanız gerekir. Bu adım, büyük sayıları normalleştirir.
Not: Bir çağrının GraphQL API en düşük maliyeti, tek bir isteği temsil eden 1’dir.

İşte örnek bir sorgu ve skor hesaplaması:

query {
  viewer {
    username
    projects(first: 100) {
      edges {
        node {
          id
          files(first: 50) {
            edges {
              node {
                id
                strings(first: 60) {
                  edges {
                    node {
                      ... on PlainSourceString {
                        id
                        text
                      }
                      ... on ICUSourceString {
                        id
                        text
                      }
                      ... on PluralSourceString {
                        id
                        plurals {
                          one
                          other
                        }
                      }
                      ... on AssetSourceString {
                        id
                        text
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
  • 100 proje döndürürken, projelerin listesini almak için API kullanıcının hesabına bir kez bağlanmak zorundadır. Yani projeler için istekler = 1
  • 50 dosya döndürürken, API dosyaların listesini almak için 100 projenin her birine bağlanmak zorundadır. Yani dosyalar için istekler = 100
  • 60 dizgi döndürürken, API dizgilerin listesini almak için 5.000 potansiyel toplam dosyanın her birine bağlanmak zorundadır. Yani dizgiler için istekler = 5.000
  • Toplam = 5.101

Şimdi, 5.101 toplamını 100’e bölün ve yuvarlayın. Sonuç olarak, 51 olan sorgunun son skorunu alırsınız.

Bu makale yararlı oldu mu?