# Sorgu maliyetini ve throttle durumunu okuma

> Her Admin API yanıtı, maliyetini ve kalan kotayı extensions.cost içinde bildirir. Bunu istekleri dengelemek ve THROTTLED hatalarını yönetmek için kullanın.

Sayfa: https://lintelagency.com/tr/kaynaklar/graphql/sorgu-maliyeti-ve-throttle-durumu

## Kısaca

Admin GraphQL API uygulamaları istek sayısıyla değil sorgu maliyetiyle sınırlar. Her yanıtta requestedQueryCost, actualQueryCost ve throttleStatus (maximumAvailable, currentlyAvailable, restoreRate) içeren extensions.cost bulunur. Bir sonraki sorgudan önce currentlyAvailable’ın maliyetini karşıladığını kontrol edin; karşılamıyorsa kovanın saniyede restoreRate puan hızla dolmasını bekleyin. Tek bir sorgu 1.000 puanı geçemez.

## Bilgiler

- **API:** Admin GraphQL API
- **Nerede:** Her yanıttaki extensions.cost
- **Geri dolum hızı:** Standard 100 puan/sn, Advanced 200, Plus 1.000, Commerce Components 2.000
- **Yerini aldığı REST çağrısı:** X-Shopify-Shop-Api-Call-Limit başlığı
- **API sürümü:** 2026-10
- **Son kontrol:** 2 Kasım 2026

## Nasıl kullanılır

1. Her yanıttan extensions.cost’u okuyun; istenen maliyet sorgu çalışmadan önce ayrılır, kullanılmayan kısım iade edilir.
2. Bir sonraki istekten önce beklenen maliyetini currentlyAvailable ile karşılaştırın ve gerekiyorsa bekleyin (wait-for-budget.js).
3. THROTTLED hatasında bekleyip aynı isteği tekrar deneyin; Shopify en az bir saniye beklemeyi önerir.
4. Her alanın maliyete ne kadar eklediğini görmek için Shopify-GraphQL-Cost-Debug: 1 başlığını gönderin.

## Kod

### products-with-cost.graphql

```graphql
query RecentProducts($first: Int!) {
  products(first: $first, sortKey: UPDATED_AT, reverse: true) {
    nodes {
      id
      title
      variants(first: 5) {
        nodes {
          id
          sku
        }
      }
    }
  }
}
```

### products-with-cost.variables.json

```json
{
  "first": 50
}
```

### products-with-cost.response.json

```json
{
  "data": {
    "products": {
      "nodes": [
        {
          "id": "gid://shopify/Product/1234567890",
          "title": "Linen shirt",
          "variants": {
            "nodes": [
              {"id": "gid://shopify/ProductVariant/1111111111", "sku": "LS-S"}
            ]
          }
        }
      ]
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 302,
      "actualQueryCost": 14,
      "throttleStatus": {
        "maximumAvailable": 2000.0,
        "currentlyAvailable": 1986,
        "restoreRate": 100.0
      }
    }
  }
}
```

### throttled.json

```json
{
  "errors": [
    {
      "message": "Throttled",
      "extensions": {
        "code": "THROTTLED",
        "documentation": "https://shopify.dev/api/usage/limits#rate-limits"
      }
    }
  ],
  "extensions": {
    "cost": {
      "requestedQueryCost": 302,
      "actualQueryCost": null,
      "throttleStatus": {
        "maximumAvailable": 2000.0,
        "currentlyAvailable": 120,
        "restoreRate": 100.0
      }
    }
  }
}
```

### wait-for-budget.js

```js
// Waits until the bucket has room for the next query, using the throttle
// status Shopify returns in extensions.cost of every Admin API response.
const MS_PER_SECOND = 1000;

/** Milliseconds to wait before a query that will request `nextCost` points. */
export function waitBeforeNext(cost, nextCost) {
  const {currentlyAvailable, restoreRate} = cost.throttleStatus;
  if (currentlyAvailable >= nextCost) return 0;
  return Math.ceil(((nextCost - currentlyAvailable) / restoreRate) * MS_PER_SECOND);
}

/** True when the response failed only because the bucket was empty. */
export function isThrottled(body) {
  return Array.isArray(body.errors) && body.errors.some((e) => e.extensions?.code === 'THROTTLED');
}
```

## Sınırlar ve özel durumlar

- Varsayılan maliyetler: skaler ve enum 0, nesne 1, mutation 10, bağlantılar first ya da last’a göre. Shopify bazı alanlara farklı maliyet atayabilir.
- İstenen maliyet sayfaların dolu geleceğini varsayar. Daha küçük first değerleri ve daha az iç içe bağlantı maliyeti en çok düşürür.
- İstenen maliyeti 1.000 puanı aşan bir sorgu, çalışmadan MAX_COST_EXCEEDED ile başarısız olur. Sorguyu bölün ya da bulk operation kullanın.
- Sınırlar uygulama ve mağaza bazındadır: başka uygulamalar sizin kotanızı tüketmez.
- Girdi dizileri tüm Shopify API’lerinde en fazla 250 öğe olabilir.

## Sorular

### Shopify GraphQL istek sınırı nedir?

Maliyete dayalıdır: Standard planlarda saniyede 100 puan, Advanced’de 200, Plus’ta 1.000 ve Commerce Components’ta 2.000; sorgu başına en fazla 1.000 puan.

### THROTTLED hatalarından nasıl kaçınırım?

Yalnızca ihtiyacınız olan alanları ve sayfa boyutlarını isteyin, currentlyAvailable’ı takip edip azaldığında bekleyin, büyük okuma ve yazmaları bulk operation’a taşıyın.

### İstenen maliyet neden gerçek maliyetten yüksek?

İstenen maliyet her bağlantının dolu bir sayfa döndüreceğini varsayar. Gerçek maliyet dönen veriyi sayar; aradaki fark kotanıza iade edilir.

## Shopify belgeleri

- [GraphQL Admin API rate limits](https://shopify.dev/docs/apps/build/apis/graphql-admin/rate-limits)
- [Shopify API limits](https://shopify.dev/docs/api/usage/limits)

## İlgili içerikler

- [Sonuçları cursor ile sayfalama](https://lintelagency.com/tr/kaynaklar/graphql/cursor-ile-sayfalama)
- [Tüm ürünleri bulk operation ile dışa aktarma](https://lintelagency.com/tr/kaynaklar/graphql/tum-urunleri-toplu-disa-aktarma)
- [Shopify stoğunu başka bir sistemle senkron tutmak](https://lintelagency.com/tr/blog/shopify-stok-senkronizasyonu)

Lisans: MIT. Kendi mağazanızda da müşteri işlerinizde de ücretsiz kullanabilirsiniz.
