Skip to main content

API Kullanım Skorları

Her API çağrısı, çağrıldığı endpoint'in skoruna eşit puan tüketir. Bu skorlar monthly_limit alanı altında client başına aylık olarak toplanır; limit aşıldığında middleware HTTP 429 ile yanıtı keser.

Skor Lookup Sözleşmesi

UsageLimit middleware'i her isteği sunucu tarafındaki usage.EndpointScores tablosundan arar:

  • Anahtar formatı: <METHOD> <templated_path> (örn. GET /v2/tokens/:tokenID).
  • Eşleşme bulunursa, kayıttaki tam sayı puan tüketilir.
  • Eşleşme yoksa, DefaultScore = 1000 uygulanır.

/v2/health haricinde her endpoint pratikte ya tabloda 1000 olarak tanımlıdır, ya da default 1000'e düşer; bu yüzden bir partner için "her çağrı 1 birim tüketir" gibi düşünmek doğru bir yaklaşım. Daha pahalı group_search benzeri uçların gelecekte 2000 olarak tanımlanması planlandığı için, kullanıcı tarafında bu tabloyu sertleştirmemenizi öneririz — limit yönetimini X-MonthlyLimit-* header'ları üzerinden yapın.

Bilinen tutarsızlık

Production middleware bugün c.Request().URL.Path (literal path, örn. /v2/tokens/68ae.../listing) ile lookup yapmaktadır; EndpointScores anahtarları ise templated path (/v2/tokens/:tokenID/listing) ile yazılmıştır. Bu yüzden tabloda explicit puanı tanımlı endpoint'ler bile bugün için DefaultScore = 1000'e düşer. Lookup'ı c.Path() ile yapmak veya path'i normalize etmek henüz uygulanmadığında pratik etki şudur: /v2/health dışındaki tüm endpoint'ler 1000 puan tüketir. Yeni puanlama planlandığında bu davranış kullanıcıya görünür biçimde değişebilir.

Aylık Skor Sayacı

  • Sayaç Redis'te monthly-usage-{clientID}-{YYYY-MM} anahtarı altında tutulur.
  • Cache miss durumunda sayaç MongoDB'deki usages koleksiyonundan toplanıp yeniden cache'lenir (cache hit'lerinde legitimate zero ile cache miss ayrımı *int64 döndürmek üzere yapılır — yani 0 puan kullanan client her seferinde Mongo'ya düşmez).
  • Her başarılı API isteği sonrası sayaç o isteğin skoru kadar arttırılır.
  • Aylık limit aşıldığında middleware aşağıdaki yanıtı üretir:
    • HTTP 429 Too Many Requests
    • X-MonthlyLimit-Limit, X-MonthlyLimit-Used, X-MonthlyLimit-Remaining header'ları
    • Sayaç gelecek ayın başında otomatik olarak sıfırlanır (YYYY-MM anahtarı değişir).

Endpoint Skor Tablosu

Aşağıdaki tablo usage.EndpointScores haritasının canlı görüntüsüdür. Listede olmayan her endpoint DefaultScore = 1000'e düşer. Templated path'ler :nodeID, :tokenID gibi parametre yer tutucularını gösterir.

Health

EndpointMethodSkor
/v2/healthGET0

Authentication

EndpointMethodSkor
/v2/oauth/tokenPOST1000

Nodes

EndpointMethodSkor
/v2/nodes/rootGET1000
/v2/nodes/:nodeIDGET1000
/v2/nodesPOST1000
/v2/nodes/:nodeIDPUT1000
/v2/nodes/:nodeIDDELETE1000
/v2/nodes/:nodeID/contract/statusGET1000
/v2/nodes/:nodeID/summaryGET1000
/v2/nodes/:nodeID/children/searchPOST1000
/v2/nodes/:nodeID/deploy/contractsPOST1000

Tokens

EndpointMethodSkor
/v2/tokens/:tokenIDGET1000
/v2/tokens/:tokenIDPUT1000
/v2/tokens/:tokenIDDELETE1000
/v2/tokens/:tokenID/metricPUT1000
/v2/tokens/node/:nodeIDPOST1000
/v2/tokens/node/:nodeID/searchPOST1000
/v2/tokens/:tokenID/rentPOST1000
/v2/tokens/:tokenID/listingPOST1000
/v2/tokens/:tokenID/delistPOST1000
/v2/tokens/:tokenID/passivePOST1000
/v2/tokens/:tokenID/burnPOST1000
/v2/tokens/:tokenID/public-transferPOST1000
/v2/tokens/:tokenID/open-to-otcPOST1000
/v2/tokens/:tokenID/open-to-secondary-marketPOST1000
/v2/tokens/:tokenID/transactions/searchPOST1000

Fees

EndpointMethodSkor
/v2/fees/nodes/:nodeIDGET1000
/v2/fees/nodes/:nodeIDPOST1000
/v2/fees/nodes/:nodeID/platformGET1000
/v2/fees/nodes/:nodeID/platformPOST1000
/v2/fees/:id/nodes/:nodeIDPUT1000
/v2/fees/:id/nodes/:nodeID/platformPUT1000

Categories

EndpointMethodSkor
/v2/categories/rootGET1000
/v2/categories/:categoryIDGET1000
/v2/categories/:categoryID/children/searchPOST1000

Supervisors

EndpointMethodSkor
/v2/supervisors/nodes/:nodeIDGET1000

Diğer Endpoint'ler

EndpointScores tablosunda yer almayan tüm endpoint'ler (purchases, OTC, secondary-markets, users CRUD, KYC, vb. dahil) default 1000 skor tüketir. Aşağıdaki uç başlıkları örnektir — listede olup olmamaları aktif skoru değiştirmez:

  • /v2/users/users/... (user CRUD ve wallet)
  • /v2/users/tokens/... (kullanıcı token okuma, burn)
  • /v2/users/purchases/...
  • /v2/users/secondary-markets/...
  • /v2/users/otcs/...
  • /v2/admin/... (admin tarafı uçları — admin context backend'inde çalışır, integration scoring tablosu admin path'lerini açıkça içermez)

Belirli bir uca özel puanlama planlanıyorsa usage.EndpointScores haritasına eklenmelidir; ardından middleware'i template path lookup'a geçirmek gerekir (bkz. yukarıdaki uyarı kutusu).

Hata Yanıtı

HTTP/1.1 429 Too Many Requests
Content-Type: application/json
X-MonthlyLimit-Limit: 100000
X-MonthlyLimit-Used: 100000
X-MonthlyLimit-Remaining: 0
Retry-After: 1209600
{
"code": -1,
"domain": 0,
"message": "monthly_limit_exceeded"
}

Retry-After saniye cinsindendir ve içinde bulunulan ayın sonuna kadar bir tahmindir.

Pratik Öneriler

  • X-MonthlyLimit-Remaining header'ını client tarafında izleyin; 429'a girmeden quota artırma talebi açın.
  • Sıfır skorlu (/v2/health) probe endpoint'lerini canlılık kontrolleri için seçin; bunlar quota'yı yemez.
  • Bulk işlemlerde mümkünse */search uçlarını paginasyon ile çağırın — tek tek GET çağırmaya kıyasla aynı skor maliyetiyle daha az çağrı yapmış olursunuz.