Proje: OkulUp · Hub: OkulUp — Architecture
API Client Architecture
Temel Yapı
Tek bir Axios instance: src/services/api/client.ts
baseURL: EXPO_PUBLIC_API_URL + '/api'
timeout: 30000
headers: { 'Content-Type': 'application/json', Accept: 'application/json' }Token Yönetimi
setAuthToken(token) — Axios default header’ına Bearer token ekler/siler.
Çağrılan yerler:
login()→ başarılı login’delogout()→ logout’ta null ileauthSlice.hydrate()→ uygulama başlangıcında AsyncStorage’dan restoreonRehydrateStoragecallback → Zustand persist rehydrate’de
Request Interceptor
Header’da Authorization yoksa store’dan token alarak ekler. (Circular dep için lazy require kullanıyor.)
Response Interceptor
401: Auth endpoint değilse otomatik logout + router.replace('/(auth)/login')
403: skipForbiddenToast: true config’i yoksa toast ile hata mesajı gösterir
Tüm hatalar: classifyError() ile typed error’a çevrilir + Sentry breadcrumb
Error Sınıfları (src/services/api/errors.ts)
| Sınıf | HTTP | Mesaj |
|---|---|---|
NetworkError | — | İnternet bağlantınızı kontrol edin |
TimeoutError | ECONNABORTED | İstek zaman aşımına uğradı |
UnauthorizedError | 401 | Oturum süresi doldu |
ForbiddenError | 403 | Bu işlem için yetkiniz bulunmuyor |
NotFoundError | 404 | İçerik bulunamadı |
ValidationError | 422 | field errors map içeriyor |
ServerError | 5xx | Sunucu hatası |
API Response Tipleri
ApiResponse<T> // { data: T; message?: string }
PaginatedResponse<T> // { data: T[]; links; meta: { current_page, last_page, total, per_page } }Servis fonksiyonlarında:
- List →
return response.data(PaginatedResponse döner) - Detail/Create/Update →
return response.data.data(unwrap) - Delete →
void - Upload → Content-Type: multipart/form-data,
createFormData()utility
Servis Dosyaları
Her resource için ayrı dosya: src/services/api/{resource}.ts
Mevcut servisler: auth, socialAuth, users, announcements, messages, notifications, events, galleries, attendances, payments, tracking, classes, appointments, media, preferences, app-config, mobile-config, dashboard, academic, assignments, reports, dailyOverview, notes, document-requests, enrollment, meal-menus
Tümü src/services/api/index.ts’ten barrel export ediliyor.
Related
- tech-stack — Axios versiyonu
- state-management — auth store ile token senkronizasyonu