Bu dokümanı ne zaman referans almalısınız
Hız sınırlaması, bir müşterinin saniye başına yapabileceği API isteklerinin sayısını sınırlayarak sistemimizi korumanın bir yoludur. Bunu API çağrıları için bir hız sınırı gibi düşünün.
Bu ne zaman karşımıza çıkabilir?
- Müşteri neden hız sınırı hatası aldığını sorar
- Geliştirici API kullanım sınırları hakkında sorar
- Birisi "kaç istek yapabiliriz?" sorusuyla gelir
Hızlı referans: Müşteriler saniyede 3.000 puan (300.000 maksimum kapasite) alır. Sorgu maliyetleri karmaşıklığa göre değişir - aşağıda daha fazla bilgi ve örnekleri görebilirsiniz.
Neden karmaşıklığa dayalı hız sınırlaması?
Geleneksel REST API'leri, her isteğin bir veya yüzlerce alan alıp almadığı, veri okuması mı yoksa değiştirmesi mi olduğu fark etmeksizin aynı kredileri tükettiği istek temelli hız sınırlaması kullanır - sunucu yüküne göre önemli bir farklılık olmasına rağmen.
GraphQL'in sorgu karmaşıklığı tabanlı yaklaşımı bunu, istenen veriler ve yapılan işlemlere dayalı maliyetler hesaplayarak çözer. Bu size ihtiyacınız olan şeyleri isteme konusunda daha fazla esneklik verirken tahmin edilebilir bir sunucu yükü sağlar.
Hız sınırı
Zonos, her sorgunun karmaşıklığına göre puanlar çıkardığı puan tabanlı bir sistem kullanır. Şu özellikler bulunan puanlarınız vardır:
- Saniyede 3.000 puanla yenilenir (10 saniyede 30.000 puan)
- 300.000 puanın maksimum kapasitesi vardır
Bu, karmaşık sorguların zaman zaman patlamalarını yapabilirken sürdürülebilir bir istek hızını koruyabilmenizi sağlar.
Sorgu maliyeti nasıl hesaplanır
Her GraphQL isteğinin yürütülmeden önce hesaplanmış bir maliyeti vardır:
Temel maliyetler
- Sorgu: 5 puan
- Mutasyon: 10 puan
- Nesne: döndürülen nesne başına 1 puan
- Skalar alanlar: 0 puan (ücretsiz)
Dizeler, tamsayılar, kimlikler ve boole değerleri gibi skalar alanlar maliyete eklenmez. Sadece temel işlem ve döndürülen nesneler için ödeme yaparsınız.
Örnek: Basit sorgu
query { landedCost(id: "123") { id createdBy shipToCountry }}Maliyet dağılımı: 5 (temel sorgu) + 1 (landed cost nesnesi) = 6 puan
Skalar alanlar (id, name, currency) ücretsizdir.
Örnek: Çoklu nesneler içeren sorgu
{ orders(first: 10, filter: { status: COMPLETED }) { edges { cursor node { id } } }}Maliyet dağılımı: 5 (temel sorgu) + 10 (10 sipariş × 1 puan) = 15 puan
Örnek: Mutasyon
mutation { landedCostCalculate(input: { ... }) { id }}Maliyet dağılımı: 10 (temel mutasyon) + yaklaşık 50 (döndürülen nesneler) = 60 puan
Tipik bir landed cost hesaplaması karmaşıklık açısından yaklaşık 60 puana mal olur.
Sorgu karmaşıklığını görüntüleme
Her API yanıtı sorgunuzun maliyetini gösteren zonos-query-complexity başlığını içerir:
zonos-query-complexity: 58Bu başlık, sorgunun kaç puan tükettiğini tam olarak gösterir. Bunu, API kullanımınızı izlemek ve pahalı sorguları optimize etmek için kullanın.
Hız sınırlarını işleme
Hız sınırınızı aşarsanız bir hata mesajı alırsınız. Hız sınırlarını etkili bir şekilde işlemek için:
Karmaşıklığınızı izleyin
Sorgu maliyetlerinizi anlamak ve pahalı desenleri tanımlamak için yanıtlardaki zonos-query-complexity başlığını kontrol edin.
Yeniden deneme mantığı uygulayın
Hız sınırına ulaşırsanız, üstel geri çekilme ve yeniden deneme mantığı uygulayın. Kova saniyede 3.000 puan yenilediği için, sorgu karmaşıklığınıza göre uygun bekleme sürelerini hesaplayın.
Verimli bir şekilde toplayın
GraphQL, tek bir istekte birden fazla sorgu istemenize izin verir:
{ landedCost(id: "landed_cost_123") { id createdAt } order(orderId: "order_123") { id status createdAt }}En iyi uygulamalar
Sadece ihtiyacınız olan şeyleri isteyin
Sorgu karmaşıklığı, istediğiniz verilerle orantılıdır. Sorgularınızı, gerçekten kullanacağınız alanları ve nesneleri yalnızca getirmek için yapılandırın.
query { order(orderId: "order_123") { id status createdAt updatedAt items { id name quantity amount } shipments { id } }}Geniş veri kümelerini sayfalandırın
Birden fazla nesne isterken, makul sayfa boyutlarını kullanın:
{ orders(first: 100, filter: { status: COMPLETED }) { edges { cursor node { id } } }}Bir seferde yüzlerce nesne istemek yerine aynı anda 10-50 öğe isteyin ve sonuçlar arasında sayfalandırın.
Gereksiz iç içe geçmeyi önleyin
Her iç içe geçmiş nesne karmaşıklığınıza eklenir. Sadece gerçekten ihtiyacınız olduğunda iç içe geçmiş verileri isteyin.
GraphQL API hız sınırlaması
Zonos'un sorgu maliyetlerini karmaşıklığa dayalı olarak nasıl hesapladığını öğrenin.
Zonos, GraphQL API isteklerini istek sayısı yerine sorgu karmaşıklığına göre hız sınırlar. Bu, adil kullanımı sağlarken size ihtiyaç duyduğunuz verileri tam olarak isteme özgürlüğü verir.