Proje: Okul B2B App · Hub: Okul B2B App — Conventions
ApiClient Header Yönetimi
utils/ApiClient.ts singleton’da default header’lar.
Header Yaşam Döngüsü
| Olay | Method | Header |
|---|---|---|
| Login başarılı | apiClient.setAuthToken(token) | Authorization: Bearer {token} |
| Firma seçildi | apiClient.setCustomerId(id) | x-cid: {customerId} |
| Logout | apiClient.removeAuthToken() | Authorization kaldır |
| Logout | apiClient.removeCustomerId() | x-cid kaldır |
Sabit Header’lar
Her istekte gönderilir:
Content-Type: application/json
Accept: application/json
Accept-Language: tr
x-consumer-key: CueoknUqTMbqtT99jNoutfs1 (production) / customer (__DEV__)
X-App-Version: {app version}
x-consumer-key
API’nin istemci tipini tanımlaması için. Production’da CueoknUqTMbqtT99jNoutfs1, development’ta customer.
401 Unauthorized Handling
private async handleUnauthorized(): Promise<void> {
// isHandlingUnauthorized flag — cascade engellemek için
// Token + kullanıcı verisi temizlenir
// AuthService.onLogout event'i tetiklenir
}Bir 401 alındığında otomatik olarak tüm auth data temizlenir ve logout event’i yayılır.
Pending Requests Deduplication
Aynı URL + header’a aynı anda iki istek giderse, ikincisi bekler ve birincinin sonucunu alır:
private pendingRequests: Map<string, Promise<any>> = new Map();Related
- api-client-pattern — genel ApiClient kullanımı
- firma-okul-hiyerarsisi — x-cid context’i
- auth-akisi — token lifecycle