Okuma API'si
Okuma yolu yazma yolundan tamamen ayrıdır: ayrı hız sınırı havuzu, ayrı önbellek ve bağımsız ölçeklenebilirlik. Ingest trafiğinin panelinizi yavaşlatmaması bu ayrımın doğrudan sonucudur.
Kimlik doğrulama
Okuma uçları iki kimlik biçimini birden kabul eder:
| Biçim | Nerede kullanılır |
|---|---|
Authorization: Bearer <access-token> |
Panelde oturum açmış kullanıcı |
X-API-KEY: ebrd_pub_… |
Tarayıcıdan, gömülü bileşenlerden |
Publishable anahtar yalnızca izinli alan adı listesindeki origin'lerden
kabul edilir. Liste dışından gelen istek 403 alır; anahtarın kendisi sızsa bile
başka bir sitede kullanılamaz.
Uçlar
| Uç | Döndürdüğü |
|---|---|
GET /api/v1/projects/{id}/summary |
Ön hesaplanmış özet (olay sayıları, açık Issue, monitör durumu) |
GET /api/v1/projects/{id}/issues |
Issue listesi (cursor sayfalama) |
GET /api/v1/projects/{id}/issues/counts |
Duruma göre sayaçlar |
GET /api/v1/issues/{id} |
Issue ayrıntısı |
GET /api/v1/issues/{id}/events |
Issue'ya bağlı ham olaylar |
GET /api/v1/issues/{id}/breakdown |
Sürüm/ortam/sunucu dağılımı |
GET /api/v1/projects/{id}/events |
Log arama (tam metin + filtre) |
GET /api/v1/projects/{id}/events/histogram |
Zaman serisi (time_bucket) |
GET /api/v1/projects/{id}/usage |
Kota kullanımı |
GET /api/v1/monitors/{id}/uptime |
Uptime yüzdesi ve günlük döküm |
GET /api/v1/monitors/{id}/ssl-status |
Sertifika durumu ve kalan gün |
GET /api/v1/monitors/{id}/domain-status |
Alan adı bitiş tarihi ve registrar |
GET /api/v1/projects/{id}/stream |
Canlı olay akışı (SSE) |
GET /status/{slug} |
Herkese açık durum sayfası (kimlik gerekmez) |
Cursor sayfalama
Liste uçlarında offset yoktur. Sayfalama, son satırın (timestamp, id)
çiftinin base64url kodlanmış hâliyle yapılır:
curl "https://api.errorbird.com/api/v1/projects/<id>/issues?limit=50" -H "X-API-KEY: ebrd_pub_…"
# { "items": [...], "nextCursor": "MjAyNi0wOC0xOVQyMTowMDowMFo…" }
curl "https://api.errorbird.com/api/v1/projects/<id>/issues?limit=50&cursor=MjAyNi0w…"
nextCursor null olduğunda liste bitmiştir. Offset'in olmama sebebi
performans değil doğruluktur: siz 2. sayfayı okurken yeni bir olay geldiğinde
offset tabanlı sayfalama bir kaydı atlar veya iki kez gösterir.
Canlı akış (SSE)
const source = new EventSource(
'https://api.errorbird.com/api/v1/projects/<id>/stream?apiKey=ebrd_pub_…',
)
source.addEventListener('event', (message) => {
console.log(JSON.parse(message.data))
})
EventSource özel başlık gönderemediği için anahtar sorgu dizesinden alınır.
Bu yol yalnızca publishable anahtarları kabul eder — secret anahtar sorgu
dizesinde kabul edilseydi, sunucu loglarına ve tarayıcı geçmişine yazma yetkisi
olan bir anahtar düşerdi.
Önbellek ve gecikme
/summary, /uptime ve /ssl-status Redis'te önbelleklenir ve arkalarında
TimescaleDB sürekli toplamları (continuous aggregate) vardır. Ölçülen değerler:
önbellekten p99 18 ms, önbellek boşken p99 189 ms (120.503 olaylı proje).
Önbellek boşken aynı anahtar için gelen eşzamanlı istekler tek bir hesaplamayı paylaşır (single flight); N istek N ayrı sorgu tetiklemez.
Hız sınırı
Okuma havuzu dakikada 600 istektir (anahtar + origin başına). Aşıldığında
429 döner. Bu sayaç yazma havuzundan bağımsızdır.
Herkese açık uçlar (durum sayfası, plan kataloğu, SSO keşfi) IP başına dakikada 120 istekle sınırlıdır.
Çok kiracılı izolasyon
Başka bir organizasyonun/workspace'in kaynağına yapılan istek 403 değil 404
döner. 403, kaynağın var olduğunu doğrular; bu da tek başına bir bilgi
sızıntısıdır.