Sağlık ve Anahtar Kontrolü

1.7k görüntülenme Markdown

API'nin ayakta olduğunu ve anahtarınızın ne yapabildiğini söyleyen iki uç.

Genel Bakış

Bu iki uç bir tümleştirmenin ilk iki sorusunu yanıtlar: API ayakta mı ve elimdeki anahtar ne yapabiliyor.

Sağlık kontrolü kimlik istemez; izleme aracı ya da sürüm denetimi için doğrudan çağrılabilir. Anahtar bilgisi ise kimlik ister ama kapsam istemez: geçerli her anahtar kendi yetkilerini okuyabilir.

İkisi birlikte bir teşhis çifti kurar. Sağlık kontrolü geçip anahtar bilgisi düşerse sorun sunucuda değil kimlik bilgisinde aranır.

Referans

Sağlık Kontrolü

get/api/v1/admin/ping
System/Ping kimlik gerekmez

API'nin ayakta olduğunu ve sunucu saatini döndürür.

Dönen alanlar data — 3
pongboolAPI ayakta mı.
versionstringAPI sürümü.
timestringSunucunun saati. Sunucunun kendi saat diliminde gelir.
Hatalar —
——Bu uç herkese açık, hata döndürmez.
İstek
curl 'https://panel.ornek.com/api/v1/admin/ping'
const res = await fetch('https://panel.ornek.com/api/v1/admin/ping');
const { data } = await res.json();

const drift = Math.abs(Date.parse(data.time) - Date.now());
$ch = curl_init('https://panel.ornek.com/api/v1/admin/ping');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Bu uc ANAHTAR ISTEMEZ: erisilebilmesi anahtarinizin gecerli oldugu anlamina gelmez.
$up = Api::System()->Ping()['data']['pong'] ?? false;

Anahtar Bilgisi

get/api/v1/admin/whoami
System/Whoami kapsam gerekmez

Kullandığınız anahtarın kimliğini ve yetkilerini döndürür.

Dönen alanlar data — 4
idintAnahtarın numarası.
namestringAnahtara verilen ad.
permissionsstring[]Anahtarın taşıdığı kapsamlar. Grup ve iş adı çiftleri.
last_accessstringSon kullanıldığı an.
Hatalar 4
missing_token401Yetki başlığı gönderilmemiş.
invalid_token401Anahtar geçersiz.
ip_not_allowed403İstek izin verilen adreslerin dışından geldi.
rate_limited429İstek sınırı aşıldı.
İstek
curl 'https://panel.ornek.com/api/v1/admin/whoami' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/whoami', {
  headers: { Authorization: `Bearer ${apiKey}` },
});

if (res.status === 401) return promptForKey();

const { data } = await res.json();
const canReadInvoices = data.permissions.some((s) => s.startsWith('Invoices/'));
$ch = curl_init('https://panel.ornek.com/api/v1/admin/whoami');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Kapsami ONCEDEN okumak, her cagrida 403 yiyip ogrenmekten iyidir.
$me = Api::System()->Whoami()['data'];
$may = fn (string $s) => in_array($s, $me['permissions'], true)
    || in_array(explode('/', $s)[0] . '/*', $me['permissions'], true);

Tuzaklar

Sağlık kontrolü anahtarınızı doğrulamaz

Sağlık ucu kimlik doğrulaması yapmaz: anahtarınız iptal edilmiş, süresi dolmuş ya da hiç gönderilmemiş olsa bile başarılı döner. Bir bağlantı sınamasını yalnız buna dayandırmak, gerçek çağrılar başarısız olurken sistemi sağlıklı gösterir.

Sunucu saati sizin saatiniz değildir

Dönen saat sunucunun kendi saat dilimini taşır ve sizinkiyle uyuşmayabilir. Diğer uçlardaki tarihler de aynı dilimi taşır, yani bir tarihi kendi saatinize göre karşılaştırmak saatler tutmayan sonuçlar üretir. Bu ucun saatini referans alın.

Kapsam listesi joker taşıyabilir

Yetki listesi tek tek iş adları yerine grup jokeri ya da tümünü kapsayan bir yıldız içerebilir. Bir işin izinli olup olmadığını düz karşılaştırmayla aramak joker taşıyan anahtarlarda yanlış olumsuz verir. Grup jokerini de sınayın.

Yetki hatasını ayırmanın en hızlı yolu

Bir çağrı 403 döndürdüğünde sebep ya eksik kapsam olur ya da yanlış anahtar. Anahtar bilgisi ucu ikisini bir çağrıda ayırır: uç çalışıyorsa anahtar geçerli sayılır ve sorun kapsamda kalır. Sınırlanmış adres ve aşılmış istek sınırı da burada görünür.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.