Skip to content

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üzHookNe zaman çalışır
HttpRequestInterceptoronRequest(request)HTTP çağrısından önce, tüm request interceptor'larından sonra
HttpResponseInterceptoronResponse(response)Başarılı bir HTTP yanıtından sonra
HttpErrorInterceptoronError(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)
                                            onError

onResponse 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.

typescript
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.

typescript
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.

typescript
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.

typescript
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.

Released under the MIT License.