مرجع HttpClient
مرجع HttpClient در انگولار یک ابزار قدرتمند برای برقراری ارتباط با سرورها و مدیریت درخواستهای HTTP است که در توسعه برنامههای وب مدرن و SPAها حیاتی محسوب میشود. HttpClient امکان ارسال درخواستهای GET، POST، PUT، DELETE و سایر عملیات HTTP را با رابطی ساده و سازگار با RxJS فراهم میکند و به توسعهدهندگان اجازه میدهد جریان دادهها را به صورت واکنشی و مدیریتشده کنترل کنند. استفاده صحیح از HttpClient در انگولار نه تنها به سازماندهی بهتر کد کمک میکند بلکه به بهینهسازی عملکرد و کاهش خطاها نیز منجر میشود.
در برنامههای انگولار، components نقش اصلی در نمایش دادهها و مدیریت تعاملات کاربر دارند، در حالی که state management و data flow تضمین میکنند که دادهها به صورت مؤثر بین components و services منتقل شوند. HttpClient در این معماری به عنوان پل اصلی بین front-end و back-end عمل میکند و امکان اجرای درخواستهای غیرهمزمان، مدیریت خطاها و بهروزرسانی state را فراهم میآورد. با یادگیری مرجع HttpClient، توسعهدهندگان میتوانند کدهایی بسازند که هم قابل استفاده مجدد باشند و هم از مشکلاتی مانند prop drilling یا re-renderingهای غیرضروری جلوگیری کنند.
خواننده در این مرجع با مفاهیم پیشرفته HttpClient، استفاده صحیح از observables برای مدیریت جریان دادهها، اتصال به lifecycle components و بهترین شیوههای طراحی انگولار آشنا خواهد شد. این دانش به توسعهدهندگان کمک میکند تا برنامههای SPA پیچیده و مقیاسپذیر ایجاد کنند که هم قابل نگهداری و هم با عملکرد بالا باشند.
مثال پایه
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>لیست کاربران</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)');
}
}
در مثال فوق، UserListComponent یک component ساده انگولار است که با استفاده از HttpClient دادهها را از یک API خارجی دریافت میکند. ابتدا، interface User تعریف شده تا ساختار دادهها مشخص شود و تایپسنجی قوی انجام شود. متغیر users$ از نوع Observable
constructor با تزریق سرویس HttpClient کار میکند و امکان ارسال درخواستهای HTTP را فراهم میکند. متد ngOnInit بخشی از lifecycle component است و این تضمین را میدهد که درخواست HTTP تنها زمانی اجرا شود که component آماده نمایش باشد. استفاده از Observable و async pipe از مشکلات رایج مانند prop drilling و re-render غیرضروری جلوگیری میکند و مدیریت state به شکل بهینه انجام میشود. این روش نشان میدهد چگونه میتوان HttpClient را با ساختار component-based در انگولار ادغام کرد و جریان دادهها را به صورت مؤثر مدیریت نمود.
مثال کاربردی
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>لیست پستها</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 = 'خطا در بارگذاری دادهها';
return of([]);
})
);
}
}
Advanced انگولار 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:', error);
return throwError(() => new Error('مشکل در ارتباط با سرور، لطفاً دوباره تلاش کنید.'));
}
}
بهترین شیوههای استفاده از HttpClient در انگولار شامل رعایت مدیریت state مؤثر، اجتناب از prop drilling و re-render غیرضروری و استفاده از observables برای جریان دادههای واکنشی است. استفاده از async pipe و ترکیب آن با lifecycle methods تضمین میکند که componentها تنها زمانی دادهها را دریافت و نمایش دهند که آماده هستند و از مشکلات performance جلوگیری میشود.
از اشتباهات رایج میتوان به mutation مستقیم state، استفاده غیرمناسب از subscribe بدون مدیریت unsubscribe و ارسال درخواستهای تکراری اشاره کرد. برای رفع این مشکلات، ترکیب catchError، retry و استفاده از services به عنوان منبع مرکزی دادهها توصیه میشود. امنیت دادهها و مدیریت خطاها از دیگر مسائل مهم در HttpClient است که با استفاده از HttpHeaders و handleError قابل بهبود است. برای بهینهسازی عملکرد، محدود کردن درخواستهای HTTP و استفاده از caching نیز ضروری است. رعایت این نکات به ساخت برنامههای SPA پایدار و سریع کمک میکند و قابلیت نگهداری و مقیاسپذیری برنامه را افزایش میدهد.
📊 مرجع کامل
HttpClient | ارسال درخواست HTTP | http.get/post/put/delete() | this.http.get<User[]>('url') | پشتیبانی از انواع روشهای HTTP، Observable |
---|---|---|---|---|
get | دریافت داده | http.get<T>(url) | this.http.get<User[]>('url') | تایپسنجی دادهها، async pipe |
post | ارسال داده | http.post<T>(url, body) | this.http.post<User>('url', user) | ارسال JSON، مدیریت headers |
put | بروزرسانی داده | http.put<T>(url, body) | this.http.put<User>('url', user) | بهروزرسانی منابع |
delete | حذف داده | http.delete<T>(url) | this.http.delete<User>('url') | حذف منابع، تایپسنجی |
request | درخواست عمومی | http.request(method, url, options) | this.http.request('GET', 'url') | انعطافپذیری بیشتر |
headers | تنظیم هدرها | new HttpHeaders({'Content-Type':'application/json'}) | const headers = new HttpHeaders({'Authorization':'token'}) | ارسال هدرهای دلخواه |
params | پارامترهای URL | new HttpParams().set('key','value') | this.http.get('url',{params}) | اضافه کردن query params |
observe | نوع پاسخ | observe:'body' | 'response' | 'events' |
responseType | نوع داده پاسخ | json, text, blob | this.http.get('url',{responseType:'text'}) | خواندن دادهها به صورت متن یا باینری |
withCredentials | ارسال کوکیها | true/false | this.http.get('url',{withCredentials:true}) | مدیریت احراز هویت |
retry | تلاش مجدد | retry(n) | this.http.get('url').pipe(retry(2)) | افزایش مقاومت در برابر خطا |
catchError | مدیریت خطا | catchError(err => of([])) | this.http.get('url').pipe(catchError(err => of([]))) | کنترل خطاهای HTTP |
pipe | زنجیره RxJS | observable.pipe(operator) | this.http.get('url').pipe(map()) | ترکیب اپراتورهای RxJS |
unsubscribe | لغو اشتراک | subscription.unsubscribe() | this.sub.unsubscribe() | مدیریت حافظه و جلوگیری از leak |
📊 Complete انگولار Properties Reference
Property | Values | Default | Description | انگولار Support |
---|---|---|---|---|
observe | 'body','response','events' | 'body' | مشخص میکند چه چیزی از پاسخ HTTP دریافت شود | 8+ |
responseType | 'json','text','blob','arraybuffer' | 'json' | نوع داده برگشتی از سرور | 8+ |
headers | HttpHeaders | – | هدرهای سفارشی HTTP | 8+ |
params | HttpParams | – | پارامترهای URL | 8+ |
withCredentials | boolean | false | ارسال کوکیها با درخواست | 8+ |
reportProgress | boolean | false | گزارش وضعیت پیشرفت درخواست | 8+ |
observeEvents | boolean | false | مشاهده رویدادهای کامل درخواست | 8+ |
retry | number | 0 | تعداد تلاش مجدد در صورت خطا | 8+ |
catchError | function | – | مدیریت خطاهای HTTP | 8+ |
pipe | function | – | زنجیره اپراتورهای RxJS | 8+ |
unsubscribe | function | – | لغو اشتراک از observable | 8+ |
خلاصه و مراحل بعدی در انگولار: یادگیری مرجع HttpClient به توسعهدهندگان امکان میدهد که دادهها را به صورت واکنشی مدیریت کرده و برنامههای SPA مقیاسپذیر بسازند. کلید اصلی درک نحوه ارتباط components با services و مدیریت state از طریق observables است. در پروژههای واقعی، استفاده از HttpClient همراه با error handling، caching و optimization، عملکرد برنامه را بهبود میبخشد.
برای گسترش مهارتها، توصیه میشود مطالعه بیشتری روی RxJS، lifecycle hooks، state management libraries مانند NgRx و تکنیکهای بهینهسازی performance انجام شود. همچنین ایجاد سرویسهای reusable و استانداردسازی ارتباطات HTTP به طراحی برنامههای قابل نگهداری کمک میکند. با تمرین مثالهای عملی و توسعه پروژههای واقعی، توانایی استفاده حرفهای از HttpClient در انگولار افزایش مییابد و پایه محکمی برای یادگیری پیشرفتهتر انگولار فراهم میآورد.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود