HttpClient Referansı
Angular'da HttpClient Referansı, modern web uygulamaları ve SPA (Single Page Application) projelerinde veri alışverişini yönetmek için kritik bir araçtır. HttpClient, HTTP isteklerini (GET, POST, PUT, DELETE) kolay ve etkili bir şekilde gerçekleştirmeyi sağlar ve RxJS ile entegre çalışarak reaktif veri akışlarını yönetir. Bu, uygulamanın performansını artırır, veri akışını düzenler ve komponentler arasında veri paylaşımını kolaylaştırır.
HttpClient, Angular bileşenleri ve servisleriyle birlikte kullanıldığında veri akışını merkezi olarak yönetmek, bileşen yaşam döngüsüne uyum sağlamak ve uygulama durumunu doğru bir şekilde kontrol etmek mümkün olur. Bu referans, prop drilling, gereksiz yeniden render işlemleri ve durum mutasyonları gibi yaygın hatalardan kaçınmaya yardımcı olacak stratejileri de içerir.
Bu kaynak, geliştiricilere HttpClient kullanımını pratik örneklerle öğretirken; veri akışı yönetimi, lifecycle entegrasyonu, hata yönetimi ve performans optimizasyonu gibi ileri düzey konuları kapsar. Okuyucu, Angular uygulamalarında yeniden kullanılabilir ve sürdürülebilir servisler ve bileşenler oluşturmayı öğrenecek ve HttpClient ile veri yönetiminde en iyi uygulamaları kavrayacaktır.
Temel Örnek
typescriptimport { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
interface User {
id: number;
name: string;
email: string;
}
@Component({
selector: 'app-user-list',
template: ` <h2>Kullanıcı Listesi</h2> <ul> <li *ngFor="let user of users$ | async">{{ user.name }} - {{ user.email }}</li> </ul>
`
})
export class UserListComponent implements OnInit {
users$: Observable<User[]>;
constructor(private http: HttpClient) {}
ngOnInit(): void {
this.users$ = this.http.get<User[]>('[https://jsonplaceholder.typicode.com/users](https://jsonplaceholder.typicode.com/users)');
}
}
Bu örnek, Angular'da HttpClient kullanımını temel düzeyde göstermektedir. UserListComponent bileşeni, dış bir API’den kullanıcı verilerini almak için HttpClient’i kullanır. User arayüzü, tip güvenliğini garanti eder ve users$ Observable tipinde tanımlanmıştır; bu sayede reaktif veri yönetimi sağlanır.
HttpClient servisi, constructor ile enjeksiyon yoluyla bileşene dahil edilmiştir. ngOnInit yaşam döngüsü metodu, bileşen yüklendiğinde verinin çekilmesini sağlar. Async pipe, template içerisinde observable’ın otomatik olarak abone olmasını ve aboneliğin iptal edilmesini yönetir. Bu yapı, gereksiz yeniden render işlemlerini engeller ve prop drilling sorununu ortadan kaldırır. Bu yaklaşım, gerçek dünya Angular projelerinde HttpClient kullanımına uygun, ölçeklenebilir ve yeniden kullanılabilir bir örnektir.
Pratik Örnek
typescriptimport { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { catchError } from 'rxjs/operators';
import { Observable, of } from 'rxjs';
interface Post {
id: number;
title: string;
body: string;
}
@Component({
selector: 'app-post-list',
template: ` <h2>Post Listesi</h2> <ul> <li *ngFor="let post of posts$ | async">{{ post.title }}</li> </ul> <div *ngIf="errorMessage" class="error">{{ errorMessage }}</div>
`
})
export class PostListComponent implements OnInit {
posts$: Observable<Post[]>;
errorMessage: string = '';
constructor(private http: HttpClient) {}
ngOnInit(): void {
this.posts$ = this.http.get<Post[]>('[https://jsonplaceholder.typicode.com/posts](https://jsonplaceholder.typicode.com/posts)')
.pipe(
catchError(error => {
this.errorMessage = 'Veriler yüklenirken hata oluştu';
return of([]);
})
);
}
}
Advanced Angular Implementation
typescriptimport { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError, retry } from 'rxjs/operators';
export interface Todo {
id: number;
title: string;
completed: boolean;
}
@Injectable({
providedIn: 'root'
})
export class TodoService {
private apiURL = '[https://jsonplaceholder.typicode.com/todos](https://jsonplaceholder.typicode.com/todos)';
private headers = new HttpHeaders({ 'Content-Type': 'application/json' });
constructor(private http: HttpClient) {}
getTodos(): Observable<Todo[]> {
return this.http.get<Todo[]>(this.apiURL)
.pipe(
retry(2),
catchError(this.handleError)
);
}
addTodo(todo: Todo): Observable<Todo> {
return this.http.post<Todo>(this.apiURL, todo, { headers: this.headers })
.pipe(catchError(this.handleError));
}
private handleError(error: HttpErrorResponse) {
console.error('HTTP Hatası:', error);
return throwError(() => new Error('Sunucu hatası, lütfen tekrar deneyin.'));
}
}
HttpClient kullanırken Angular için en iyi uygulamalar, durumu doğru şekilde yönetmek, prop drilling’den kaçınmak, async pipe ve observables ile veri akışını reaktif olarak kontrol etmektir. Doğrudan durum mutasyonu, kontrolsüz abonelikler ve hata yönetimi eksikliği, yaygın hatalar arasında yer alır.
Hata yönetimi için catchError, retry gibi RxJS operatörleri kullanılmalı ve servisler üzerinden enjeksiyon sağlanmalıdır. Performans optimizasyonu için HTTP isteklerinin cache edilmesi, gereksiz tekrarların önlenmesi ve async pipe kullanımı önemlidir. Güvenlik açısından ise header yapılandırması ve kimlik doğrulama dikkatle uygulanmalıdır. Bu yaklaşım, SPA projelerinde ölçeklenebilir ve yüksek performanslı uygulamalar geliştirmeyi sağlar.
📊 Kapsamlı Referans
HttpClient | HTTP istekleri yapar | http.get/post/put/delete() | this.http.get<User[]>('url') | GET, POST, PUT, DELETE yöntemlerini destekler ve Observable döner |
---|---|---|---|---|
get | Veri alır | http.get<T>(url) | this.http.get<User[]>('url') | async pipe ve tip güvenliği ile entegre |
post | Veri gönderir | http.post<T>(url, body) | this.http.post<User>('url', user) | JSON gönderimi ve header yapılandırması |
put | Veri günceller | http.put<T>(url, body) | this.http.put<User>('url', user) | Kaynakları günceller |
delete | Veri siler | http.delete<T>(url) | this.http.delete<User>('url') | Tip güvenliği ile silme |
request | Genel istek | http.request(method, url, options) | this.http.request('GET', 'url') | Esnek kullanım |
headers | Header ayarları | new HttpHeaders({'Content-Type':'application/json'}) | const headers = new HttpHeaders({'Authorization':'token'}) | Özel header gönderimi |
params | URL parametreleri | new HttpParams().set('key','value') | this.http.get('url',{params}) | Query parametre ekleme |
observe | Yanıt tipi | observe:'body' | 'response' | 'events' |
responseType | Yanıt veri tipi | json, text, blob | this.http.get('url',{responseType:'text'}) | Metin veya binary veri okuma |
withCredentials | Cookie gönderimi | true/false | this.http.get('url',{withCredentials:true}) | Kimlik doğrulama yönetimi |
retry | Tekrar sayısı | retry(n) | this.http.get('url').pipe(retry(2)) | Hatalarda yeniden deneme |
catchError | Hata yönetimi | catchError(err => of([])) | this.http.get('url').pipe(catchError(err => of([]))) | HTTP hata kontrolü |
pipe | RxJS zinciri | observable.pipe(operator) | this.http.get('url').pipe(map()) | Operatör zincirleme |
unsubscribe | Abonelik iptali | subscription.unsubscribe() | this.sub.unsubscribe() | Memory leak önleme |
📊 Complete Angular Properties Reference
Property | Values | Default | Description | Angular Support |
---|---|---|---|---|
observe | 'body','response','events' | 'body' | HTTP yanıtından dönecek veri tipi | 8+ |
responseType | 'json','text','blob','arraybuffer' | 'json' | Yanıt veri tipi | 8+ |
headers | HttpHeaders | – | Özel HTTP header’ları | 8+ |
params | HttpParams | – | URL parametreleri | 8+ |
withCredentials | boolean | false | Cookie ve kimlik doğrulama | 8+ |
reportProgress | boolean | false | İstek ilerlemesini raporlama | 8+ |
observeEvents | boolean | false | Tam HTTP olaylarını gözlemleme | 8+ |
retry | number | 0 | Hatalarda tekrar sayısı | 8+ |
catchError | function | – | Hata yönetimi fonksiyonu | 8+ |
pipe | function | – | RxJS operatör zinciri | 8+ |
unsubscribe | function | – | Observable aboneliğini iptal etme | 8+ |
HttpClient Referansı ile Angular’da veri yönetimi, reaktif programlama ve SPA performansı konularında önemli kazanımlar elde edilir. Bileşenler ve servisler ile entegre edilmiş HttpClient kullanımı, yeniden kullanılabilir ve ölçeklenebilir yapılar oluşturmayı sağlar.
Sonraki adımlar olarak RxJS ileri seviye, NgRx ile durum yönetimi, lifecycle hook optimizasyonları ve performans iyileştirme teknikleri üzerinde çalışılabilir. Gerçek projeler üzerinde uygulama yaparak, HttpClient kullanımı profesyonel düzeye taşınabilir ve Angular uygulamaları için güvenli, yüksek performanslı ve sürdürülebilir çözümler geliştirilebilir.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek