Hatalar ve hız limitleri
PortGate'in döndürdüğü her hata aynı JSON biçimine sahiptir ve bir istek kimliği taşır. Bu altı durum kodunu ele alın, her şeyi ele almış olun.
Hata biçimi
Tüm hatalar tek bir RFC-7807 tarzı gövdeyi paylaşır — bir HTTP durumu, makinece kararlı bir title, okunabilir bir detail, instance yolu ve destekle iletişime geçerken belirtmeniz gereken bir request_id:
{
"title": "Forbidden",
"status": 403,
"detail": "key lacks scope 'history'",
"instance": "/v1/candles/bist:THYAO",
"request_id": "0f3c9a1e-7b42-4d0a-9c11-8e2f5a6b3d40"
}| Alan | Tür | Notlar |
|---|---|---|
| title | string | Durum sınıfı için kısa, kararlı etiket (üzerinde switch yapmak güvenli) |
| status | int | HTTP durum kodunu yansıtır |
| detail | string | Okunabilir ayrıntılar (ör. hangi kapsamın eksik olduğu, hangi kimliğin geçersiz olduğu) |
| instance | string | Hatayı üreten istek yolu |
| request_id | string | İstek başına benzersizdir — destekle paylaşın; ayrıca her yanıtta X-Request-Id başlığı olarak döner |
Kullanılan durum kodları
| Alan | Tür | Notlar |
|---|---|---|
| 401 | Unauthorized | Eksik veya geçersiz X-API-Key. Başlık adını ve anahtarın aktif olduğunu (yenilenmemiş/iptal edilmemiş) kontrol edin. |
| 403 | Forbidden | Anahtar geçerli ama gereken kapsamdan yoksun — eksik kapsam detail içinde belirtilir. Anahtara ekleyin (veya izin veren bir plan talep edin). |
| 404 | Not Found | Böyle bir rota veya kaynak yok (ör. bir profil rotasında bilinmeyen bir fon kodu). |
| 422 | Unprocessable | Doğrulama hatası — bozuk bir enstrüman kimliği, desteklenmeyen bir ?currency= hedefi, hatalı bir tarih aralığı veya çözünürlük. detail neyi düzelteceğinizi söyler. |
| 429 | Too Many Requests | Hız limiti aşıldı. X-RateLimit-* başlıkları + Retry-After ile geri çekilin (aşağıya bakın). |
| 503 | Service Unavailable | Üst kaynak verisi anlık olarak kullanılamıyor — bir dönüşüm için eksik bir FX kuru ya da soğuk bir önbellek. Geri çekilmeyle yeniden denemek güvenlidir; hiçbir zaman bir değer uydurmaz veya eski bir değeri iliştirmeyiz. |
Bir
404 (bilinmeyen enstrüman kimliği) ile bir 422 (bozuk kimlik) arasındaki ayrım kasıtlıdır: bist:NOPE (biçimi doğru, listelenmemiş) bir 404'tür; THYAO ise piyasa ön eki gerektiren bir rotada ön ek olmadan bir 422'dir.Hız limitleri (429)
Limitler, anahtar başına bir token kovasıdır: ani yük payı olan sürekli bir hız (test planı: sürekli 10 istek/sn, ani yük 20). Her yanıt — başarılı ya da hatalı — mevcut bütçeyi taşır:
X-RateLimit-Limit: 20
X-RateLimit-Remaining: 14
X-Request-Id: 0f3c9a1e-7b42-4d0a-9c11-8e2f5a6b3d40Aştığınızda, bir 429 başlığı (saniye) ve Retry-After ile birlikte bir X-RateLimit-Remaining: 0 alırsınız:
{
"title": "Too Many Requests",
"status": 429,
"detail": "rate limit exceeded, retry after 1s",
"instance": "/v1/quotes/bist:THYAO",
"request_id": "…"
}Yeniden deneme rehberi
- 429 ve 503 geçicidir — üstel geri çekilmeyle yeniden deneyin (~1sn başlayın, birkaç denemeyle sınırlayın). 429 için varsa
Retry-Afterdeğerine uyun; aksi halde kova dolana kadar bekleyin. - 429 dışındaki 4xx (401/403/404/422) bizim değil sizin hatanızdır — körlemesine yeniden denemeyin; önce anahtarı, kapsamı, kimliği veya parametreleri düzeltin.
- Sıkı sorgulama yerine WebSocket tercih edin — REST hız bütçesini tüketmez ve her yenileme döngüsünde veri iter.
- Hatalardan gelen
request_iddeğerini her zaman kaydedin. destekle iletişime geçtiğinizde bunu ekleyin — tam isteği günlüklerimizde bulmamızı sağlar.
