Interceptor'lar
Interceptor'lar, kimlik doğrulama, loglama, hata yönetimi ve veri dönüşümü gibi çapraz kesim konularını bireysel istek call site'larını değiştirmeden uygulamak için istek/yanıt yaşam döngüsüne bağlanmanızı sağlar.
Arayüz Ayrışımı
Arayüz Ayrışımı İlkesi (ISP) sayesinde yalnızca gerçekten ihtiyaç duyduğunuz hook'ları uygularsınız. Üç odaklanmış arayüz mevcuttur:
| Arayüz | Hook | Ne zaman çalışır |
|---|---|---|
HttpRequestInterceptor | onRequest(request) | HTTP çağrısından önce, tüm request interceptor'larından sonra |
HttpResponseInterceptor | onResponse(response) | Başarılı bir HTTP yanıtından sonra |
HttpErrorInterceptor | onError(error, request) | Bir hata fırlatıldığında |
Tek bir sınıf bu arayüzlerin herhangi bir kombinasyonunu uygulayabilir.
Yaşam Döngüsü
onRequest → HTTP çağrısı → onResponse → doğrulayıcılar → onResponseValidated → çağıran
↓ (başarısızlık durumunda)
onErroronResponse her başarılı HTTP çağrısında çalışır. onResponseValidated yalnızca tüm eklenmiş doğrulayıcılar geçtiğinde çalışır — iş açısından geçerli bir yanıt gerektiren önbellekleme veya yan etkiler için idealdir.
Request Interceptor
İstekler gitmeden önce auth token gibi ortak başlıklar eklemek için kullanılır.
import { HttpRequestInterceptor, Request } from '@yildizpay/http-adapter';
export class AuthInterceptor implements HttpRequestInterceptor {
constructor(private readonly tokenService: TokenService) {}
async onRequest(request: Request): Promise<Request> {
const token = await this.tokenService.getAccessToken();
request.addHeader('Authorization', `Bearer ${token}`);
return request;
}
}Response Interceptor
Tüm gelen yanıtlarda payload'ları tekdüze şekilde incelemek veya dönüştürmek için kullanılır.
import { HttpResponseInterceptor, Response } from '@yildizpay/http-adapter';
export class LoggingInterceptor implements HttpResponseInterceptor {
async onResponse(response: Response): Promise<Response> {
console.log(`[HTTP] ${response.status} — ${response.request?.url}`);
return response;
}
}Error Interceptor
Token yenileme, uyarı gönderme veya hataları dönüştürme gibi merkezi hata yönetimi için kullanılır.
import {
HttpErrorInterceptor,
Request,
BaseAdapterException,
UnauthorizedException,
} from '@yildizpay/http-adapter';
export class GlobalErrorInterceptor implements HttpErrorInterceptor {
constructor(private readonly tokenService: TokenService) {}
async onError(error: BaseAdapterException, request: Request): Promise<never> {
if (error instanceof UnauthorizedException) {
await this.tokenService.refresh();
}
// Her zaman yeniden fırlatın — interceptor hataları sessizce bastıramaz
throw error;
}
}Interceptor'ları Kaydetme
Interceptor'ları adapter builder'a geçirin. Kayıt edildikleri sırayla çalıştırılırlar.
const adapter = HttpAdapter.builder()
.withInterceptor(
new AuthInterceptor(tokenService),
new LoggingInterceptor(),
new GlobalErrorInterceptor(tokenService),
)
.build();İstek Bazlı Interceptor Hariç Tutma
Belirli bir istek, bir veya daha fazla interceptor'ı atlaması gerekiyorsa (örneğin, yanıtta KKB bulunan hassas bir endpoint loglanmamalı), istek bazlı hariç tutmalar kullanılır. Ayrıntılar için İstek Bazlı Geçersiz Kılma sayfasına bakın.
