Randevu Ajandam

Giriş

Randevu Ajandam API, premium paket sahibi hekimlerin (doktoradi.com) ve kliniklerin (klinikadi.com) kendi özel web siteleri ile ana platform arasındaki çift yönlü veri akışını yönetir.

API altyapısı, güvenlik, yüksek performans ve izolasyon sağlamak amacıyla ana platformdan bağımsız çalışan bir Laravel API servisi olarak tasarlanmıştır. Bu servis, ana veritabanı ile doğrudan senkronize olarak çalışır.

Güvenlik & Kimlik Doğrulama

API isteklerinin güvenliği API Key + Secret Key (HMAC Signature) yöntemiyle sağlanmaktadır. Ağ üzerinden Secret Key asla ham biçimde aktarılmaz. Her isteğin sahtecilik ve manipülasyona karşı korunması için her istek özel olarak imzalanır.

Replay Attack Koruması: X-Timestamp bilgisi sunucu saati ile +/- 5 dakikadan daha fazla fark gösteriyorsa, istek güvenlik gerekçesiyle reddedilir.

İstek Başlıkları (HTTP Headers)

Başlık Tip Zorunlu Açıklama
X-Api-Key string Evet Size tahsis edilen benzersiz API Anahtarınız.
X-Timestamp integer Evet İsteğin oluşturulduğu Unix Zaman Damgası (saniye cinsinden).
X-Signature string Evet İstek verileriyle üretilmiş HMAC-SHA256 imzası.

İmza Hesaplama Metodu

İmzalanacak metin (payload) şu verilerin ardışık olarak birleştirilmesiyle elde edilir:

payload = X-Timestamp + HTTP_METHOD + PATH_INFO + REQUEST_BODY

Bu payload, size verilen Secret Key kullanılarak HMAC-SHA256 algoritmasından geçirilir. Çıkan hex değeri imzanızdır.

İmza Oluşturma Kod Örneği
<?php
$apiKey = "api_key_demo_123";
$secretKey = "secret_key_demo_456";
$timestamp = time();
$method = "POST";
$path = "/api/v1/appointments";
$body = json_encode([
    "service_id" => 1,
    "date" => "2026-07-15",
    "slot" => "10:30"
]);

// 1. Payload oluşturma
$payload = $timestamp . $method . $path . $body;

// 2. HMAC-SHA256 ile imzalama
$signature = hash_hmac("sha256", $payload, $secretKey);

// 3. İstek Gönderme (cURL Örneği)
$ch = curl_init("https://api.randevuajandam.com/api/v1/appointments");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "X-Api-Key: " . $apiKey,
    "X-Timestamp: " . $timestamp,
    "X-Signature: " . $signature
]);

$response = curl_exec($ch);
curl_close($ch);

Bağlam Algılama (Context Detection)

API Anahtarları veritabanında bir hekim (doktor_id) veya klinik (klinik_id) ile ilişkilendirilir. İstek atıldığında API hangi kimlik üzerinden geldiğini otomatik olarak algılar:

  • Bireysel Hekim Bağlamı: API sadece o hekime ait verileri (bloglar, hizmetler, randevular) döndürür ve yönetir. Klinik rotaları bu bağlamda kapalıdır (403 Forbidden).
  • Klinik Bağlamı: API klinik düzeyinde çalışır. Klinikte yer alan tüm doktorların verilerine, randevularına, hakedişlerine ve klinik ayarları ile personel listelerine erişim sağlanır.

Standart HTTP Hata Kodları

Durum Kodu Anlamı Açıklama
200 OK Başarılı İşlem başarıyla tamamlandı.
201 Created Oluşturuldu Yeni kaynak başarıyla oluşturuldu (örn. randevu eklendi).
400 Bad Request Geçersiz İstek Gönderilen parametreler eksik ya da hatalı.
401 Unauthorized Yetkisiz Erişim API Key geçersiz, imza doğrulaması başarısız veya istek zaman aşımına uğramış.
403 Forbidden Erişim Engellendi İlgili paketin yetkisi bu işlem için yetersiz veya yanlış bağlamdasınız.
404 Not Found Bulunamadı İstenen kaynak mevcut değil.
422 Unprocessable Entity Doğrulama Hatası Form / girdi doğrulama kuralları ihlal edildi. Hata detayları JSON gövdesinde döner.
500 Server Error Sunucu Hatası Sunucuda beklenmeyen bir teknik arıza oluştu.