Angular HTTP Interceptors
Mustafa Seker
Last updated
Mustafa Seker
Last updated
HTTP interceptor, web tabanlı uygulamalarda HTTP isteklerini yakalamak, değiştirmek veya bunlara tepki vermek için kullanılan bir mekanizmadır. Bu, HTTP istekleri ve yanıtları üzerinde işlem yapmayı mümkün kılar ve uygulama geliştiricilerine isteklerin ve yanıtların akışını kontrol etme ve değiştirme imkanı sunar.
Bir HTTP interceptor, bir ağ isteğini yakalayarak isteği değiştirebilir veya gerekli durumlarda yanıtı değiştirebilir. Bu, uygulamanın istekleri otomatik olarak yetkilendirmesi, kimlik doğrulaması, hata işleme, önbelleğe alma, günlükleme veya diğer özel işlemleri gerçekleştirmesi için kullanılabilir.
HTTP interceptor’lar, özellikle modern web uygulamalarında, kullanıcı deneyimini geliştirmek ve uygulamanın güvenliğini sağlamak için yaygın olarak kullanılır. İnterceptorlar, istemci tarafı (örneğin, web tarayıcısı) veya sunucu tarafı (örneğin, sunucu uygulaması) gibi farklı bileşenlerde uygulanabilir.
Angular, HTTP interceptor’ları kullanarak HTTP isteklerini yakalamak, değiştirmek ve yanıtları işlemek için özel bir mekanizma sunar. Aşağıda, Angular’da HTTP interceptor’ları nasıl kullanabileceğinizi adım adım açıkladım.
Bir HTTP interceptor oluşturun: Öncelikle, bir HTTP interceptor sınıfı oluşturmanız gerekmektedir. Bu sınıf, HttpInterceptor arayüzünü uygulamalı ve intercept() yöntemini gerçekleştirmelidir. intercept() yöntemi, her HTTP isteği ve yanıtı için çağrılacak olan ana yöntemdir. İsteği değiştirebilir veya yanıtları işleyebilirsiniz.
Interceptor’u sağlayıcı olarak kaydedin: Oluşturduğunuz interceptor’ı Angular uygulamanızda kullanabilmek için, bunu bir sağlayıcı olarak kaydetmeniz gerekmektedir. Bunun için, AppModule dosyanızda HTTP_INTERCEPTORS sabitine interceptor'ı eklemelisiniz.
Bu şekilde, interceptor’ınızı uygulama genelinde kullanılabilir hale getirmiş oluyoruz.
İstekleri ve yanıtları işleme: intercept() yöntemi içinde istekleri ve yanıtları yakalayabilir ve işleyebilirsiniz. İsteği değiştirmek için HttpRequest nesnesini kullanabilir ve yanıtları işlemek için HttpHandler nesnesini kullanabilirsiniz.
Bir örnekle inceleyelim:
HTTP Interceptor kullanırken 3 önemli handle işlemini göz önüne alalım.
Error Interceptor
Headers Interceptor
JWT Interceptor
Angular’da hata interceptor’ı kullanarak HTTP isteklerinde oluşan hataları yakalayabilir ve işleyebilirsiniz.
Bir örnekle inceleyelim:
Bir hata interceptor oluşturun: HTTP hatalarını yakalamak ve işlemek için ayrı bir interceptor sınıfı oluşturmanız gerekmektedir. Bu sınıf, HttpInterceptor arayüzünü uygulamalı ve intercept() yöntemini gerçekleştirmelidir. intercept() yöntemi, hata durumunda çağrılacak olan ana yöntemdir. Hata işleme mantığını burada uygulayabilirsiniz.
Yukarıdaki örnekte, intercept() yöntemi içinde catchError operatörünü kullanarak hataları yakalıyoruz. Ardından, hata işleme mantığını uygulayabilir ve hata durumunda hata mesajını gösterebilir veya loglayabiliriz.
Interceptor’u sağlayıcı olarak kaydedin: Oluşturduğunuz hata interceptor’ını Angular uygulamanızda kullanabilmek için, bunu bir sağlayıcı olarak kaydetmeniz gerekmektedir. Bunu, AppModule dosyanızda HTTP_INTERCEPTORS sabitine interceptor'ı ekleyerek yapabilirsiniz.
Bu şekilde, hata interceptor’ınızı uygulama genelinde kullanılabilir hale getirmiş olursunuz.
Hata işleme mantığını uygulayın: intercept() yöntemi içinde hata işleme mantığınızı uygulayabilirsiniz. Hata durumunda yapılabilecek eylemler hata mesajını gösterme, loglama, kullanıcıyı yönlendirme veya özel hata sayfalarına yönlendirme gibi şeyleri içerebilir.
Bir örnekle inceleyelim:
Yukarıdaki örnekte, catchError operatörünü kullanarak hataları yakalıyoruz ve özel hata işleme mantığını uyguluyoruz. Örneğin, hata durumuna göre kullanıcıyı oturum açma sayfasına veya özel bir hata sayfasına yönlendirebiliriz.
Bu şekilde, Angular uygulamanızda hata interceptor’ını kullanabilir ve HTTP isteklerinde oluşan hataları işleyebiliriz.
Angular’da başlık (headers) interceptor’ı kullanarak HTTP isteklerinin başlıklarını yakalayabilir, değiştirebilir veya ekleyebilirsiniz.
Bir örnekte inceleyelim:
Bir başlık interceptor oluşturun: HTTP istek başlıklarını yakalamak ve işlemek için ayrı bir interceptor sınıfı oluşturmanız gerekmektedir. Bu sınıf, HttpInterceptor arayüzünü uygulamalı ve intercept() yöntemini gerçekleştirmelidir. intercept() yöntemi, her HTTP isteği için çağrılacak olan ana yöntemdir. Başlıkları değiştirme veya eklemeyi burada gerçekleştirebilirsiniz.
Yukarıdaki örnekte, intercept() yöntemi içinde clone() yöntemini kullanarak orijinal isteği kopyalıyoruz ve setHeaders özelliğini kullanarak başlık değerlerini değiştiriyoruz veya ekliyoruz.
Interceptor’u sağlayıcı olarak kaydedin: Oluşturduğunuz başlık interceptor’ını Angular uygulamanızda kullanabilmek için, bunu bir sağlayıcı olarak kaydetmeniz gerekmektedir. Bunu, AppModule dosyanızda HTTP_INTERCEPTORS sabitine interceptor'ı ekleyerek yapabilirsiniz.
Bu şekilde, başlık interceptor’ınızı uygulama genelinde kullanılabilir hale getirmiş olursunuz.
Başlıkları değiştirme veya ekleme işlemini uygulayın: intercept() yöntemi içinde istekleri kopyalayabilir, başlıkları değiştirebilir veya ekleyebilirsiniz.
Aşağıdaki örneği inceleyelim:
Yukarıdaki örnekte, clone() yöntemini kullanarak isteği kopyalıyoruz ve setHeaders özelliğini kullanarak başlıkları değiştiriyor veya ekliyoruz.
Bu şekilde, Angular uygulamanızda başlık interceptor’ını kullanabilir ve HTTP isteklerinin başlıklarını yakalayabilir, değiştirebilir veya ekleyebilirsiniz.
JWT (JSON Web Token) interceptor, Angular uygulamalarında kullanılan bir tür HTTP interceptor’dır. JWT’ler, kimlik doğrulama ve yetkilendirme için yaygın olarak kullanılan bir standarttır. Bir JWT interceptor’ı, her HTTP isteğine otomatik olarak JWT’yi ekleyerek kimlik doğrulama işlemlerini kolaylaştırır.
Bir örnekle inceleyelim:
Bir JWT interceptor oluşturun: Öncelikle, bir JWT interceptor sınıfı oluşturmanız gerekmektedir. Bu sınıf, HttpInterceptor arayüzünü uygulamalı ve intercept() yöntemini gerçekleştirmelidir. intercept() yöntemi, her HTTP isteği için çağrılacak olan ana yöntemdir. Bu yöntemde, JWT'yi isteğe eklemek için gerekli işlemleri gerçekleştireceksiniz.
Yukarıdaki örnekte, intercept() yöntemi içinde gelen isteği klonlayarak JWT'yi isteğe ekliyoruz. JWT'yi Authorization başlığı altında Bearer prefix'iyle gönderiyoruz.
Interceptor’u sağlayıcı olarak kaydedin: Oluşturduğunuz JWT interceptor’ını Angular uygulamanızda kullanabilmek için, bunu bir sağlayıcı olarak kaydetmeniz gerekmektedir. Bunun için, AppModule dosyanızda HTTP_INTERCEPTORS sabitine interceptor'ı eklemelisiniz.
Bu şekilde, JWT interceptor’ınızı uygulama genelinde kullanılabilir hale getirmiş olursunuz.
JWT’yi isteğe otomatik olarak ekleyin: Artık her HTTP isteği otomatik olarak JWT’yi içerecektir. Bu, kimlik doğrulama gerektiren API isteklerini kolaylaştırır. İsteği göndermeden önce JWT’nin ilgili istek başlığında mevcut olduğunu kontrol etmek önemlidir.
Yukarıdaki örnekte, HttpClient kullanarak bir API çağrısı yapıyoruz ve JWT interceptor'ı otomatik olarak JWT'yi isteğe ekleyecektir.
Bu şekilde, Angular uygulamanızda JWT interceptor'ını kullanabilir ve her HTTP isteğinde JWT'yi otomatik olarak ekleyebilirsiniz. Bu, kimlik doğrulama ve yetkilendirme için kullanılan JWT'lerin yönetimini kolaylaştırır.