Angular’s 17 HttpClient Complete Tutorial – DEV Community
Angular که یک فریمورک قدرتمند جلویی است، توسعه دهندگان را با ابزارهای مختلفی برای برقراری ارتباط یکپارچه با سرورها از طریق اینترنت مجهز می کند. یکی از این ابزارهای ضروری HttpClient است که واکشی داده ها از سرورها یا ارسال داده ها به سرورها را ساده می کند. در این مقاله، به درک این موضوع خواهیم پرداخت که HttpClient چیست و چگونه آن را به طور مؤثر در برنامه Angular خود تنظیم کنید.
HttpClient ابزاری است که توسط Angular ارائه شده است که به ما در برقراری ارتباط با سرورها از طریق اینترنت کمک می کند. ما از آن برای واکشی داده ها از سرورها یا ارسال داده به سرورها استفاده می کنیم.
راه اندازی HttpClient در برنامه شما شامل پیکربندی آن با استفاده از تزریق وابستگی است. در اینجا یک راهنمای گام به گام با مثال آورده شده است:
1. ارائه HttpClient از طریق تزریق وابستگی:
ابتدا باید HttpClient را از طریق تزریق وابستگی ارائه دهید. این معمولاً در فایل پیکربندی برنامه شما انجام می شود (app.config.ts).
// app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideHttpClient } from '@angular/common/http';
export const appConfig: ApplicationConfig = {
providers: [
provideHttpClient(),
]
};
اگر برنامه شما از بوت استرپ مبتنی بر NgModule استفاده می کند، می توانید provideHttpClient را در آرایه ارائه دهندگان NgModule برنامه خود قرار دهید.
// app.module.ts
import { NgModule } from '@angular/core';
import { provideHttpClient } from 'somewhere';
@NgModule({
providers: [
provideHttpClient(),
],
// ... other application configuration
})
export class AppModule {}
اکنون، HttpClient برای تزریق در مؤلفهها، سرویسها یا کلاسهای دیگر در دسترس است.
در حالی که HttpClient را می توان مستقیماً از مؤلفه ها تزریق و استفاده کرد، معمولاً توصیه می شود خدمات قابل استفاده مجدد و تزریقی ایجاد کنید که منطق دسترسی به داده ها را ایزوله و محصور می کند.
// data.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({ providedIn: 'root' })
export class DataService {
constructor(private http: HttpClient) {
// This service can now make HTTP requests via `this.http`.
}
}
2. پیکربندی ویژگی های HttpClient:
میتوانید ویژگیهای اختیاری HttpClient را هنگام ارائه آن از طریق تزریق وابستگی پیکربندی کنید.
با واکشی:
این ویژگی HttpClient را برای استفاده از fetch API به جای پیشفرض XMLHttpRequest API تغییر میدهد.
// app.config.ts
import { provideHttpClient, withFetch } from 'somewhere';
export const appConfig: ApplicationConfig = {
providers: [
provideHttpClient(
withFetch(),
),
]
};
با رهگیرها:
مجموعه ای از توابع رهگیر را برای پردازش درخواست های ارسال شده از طریق HttpClient پیکربندی می کند.
withInterceptorsFromDi:
شامل سبک قدیمی تر رهگیرهای مبتنی بر کلاس در پیکربندی HttpClient.
withRequestsMadeViaParent:
پس از عبور از رهگیرها در سطح فعلی، درخواستها را به نمونه HttpClient در انژکتور والد ارسال میکند.
withJsonpSupport:
روش .jsonp() را در HttpClient برای بارگیری بین دامنه ای داده ها با استفاده از قرارداد JSONP فعال می کند.
withXsrfConfiguration:
به سفارشی سازی عملکرد امنیتی XSRF داخلی HttpClient اجازه می دهد.
با NoXsrfProtection:
عملکرد امنیتی XSRF داخلی HttpClient را غیرفعال می کند.
در حال واکشی داده های JSON
به طور پیشفرض، HttpClient فرض میکند که سرورها دادههای JSON را برمیگردانند.
مثال:
· فرض کنید یک فروشگاه آنلاین داریم و می خواهیم اطلاعات محصولات را از یک سرور دریافت کنیم.
// We use HttpClient to make a GET request to a server endpoint.
this.http.get('/api/products').subscribe({
next: products => {
// Once we get the products, we can display them to the user.
console.log(products);
}
});
واکشی انواع دیگر داده ها
هنگام تعامل با یک API غیر JSON، می توانید بگویید HttpClient چه نوع پاسخی را باید انتظار داشت و هنگام ارائه درخواست بازگردانید. این کار با گزینه answerType انجام می شود.
مثال:
· فرض کنید می خواهیم یک تصویر را از یک سرور دانلود کنیم.
// We use HttpClient to make a GET request for an image.
this.http.get('/images/cat.jpg', { responseType: 'blob' }).subscribe({
next: image => {
// Once we get the image, we can display it to the user.
console.log(image);
}
});
تغییر وضعیت سرور
اگر بخواهیم دادههای سرور را تغییر دهیم، میتوانیم از روشهای HTTP مانند POST، PUT یا DELETE برای تغییر دادههای روی سرور استفاده کنیم.
مثال:
· فرض کنید می خواهیم یک محصول جدید به فروشگاه آنلاین خود اضافه کنیم.
// We use HttpClient to make a POST request to add a new product.
this.http.post('/api/products', newProduct).subscribe({
next: response => {
// Once the product is added, we can do something with the response.
console.log(response);
}
});
رسیدگی به خطاها
گاهی اوقات درخواست ها به دلیل مشکلات شبکه یا خطاهای سرور با شکست مواجه می شوند. ما باید با این خطاها با ظرافت برخورد کنیم.
مثال:
· فرض کنید درخواست ما برای افزودن یک محصول به دلیل از کار افتادن سرور با شکست مواجه شد.
// We use HttpClient to make a POST request to add a new product.
http.post('/api/products', newProduct).subscribe({
next: response => {
console.log('Product added successfully:', response);
},
error: err => {
console.error('Failed to add product:', err);
// We can show an error message to the user or retry the request.
}
});
مثال
حالا بیایید یک پروژه Angular ساده برای نشان دادن استفاده از آن ایجاد کنیم HttpClient با ویژگی های مختلف مانند ارسال درخواست های HTTP، مدیریت انواع داده های مختلف و مدیریت خطا.
برای ایجاد یک پروژه جدید دستور زیر را اجرا کنید:
ng new http-client-demo
برای ایجاد یک سرویس جدید دستور زیر را اجرا کنید:
ng generate service data
حالا بیایید آن را اصلاح کنیم data.service.ts فایل در دایرکتوری src/app برای استفاده از HttpClient:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class DataService {
private apiUrl="https://jsonplaceholder.typicode.com";
constructor(private http: HttpClient) { }
// Method to fetch JSON data
getJsonData(): Observable<any> {
return this.http.get<any>(`${this.apiUrl}/posts`).pipe(
catchError(error => {
console.error('Error fetching JSON data:', error);
return throwError(()=> new Error('Something went wrong; please try again later.'));
})
);
}
// Method to fetch an image
getImage(): Observable<Blob> {
return this.http.get(`${this.apiUrl}/photos/1`, { responseType: 'blob' }).pipe(
catchError(error => {
console.error('Error fetching image:', error);
return throwError(()=> new Error('Unable to fetch image.'));
})
);
}
// Method to simulate adding a new post
addPost(newPost: any): Observable<any> {
return this.http.post<any>(`${this.apiUrl}/posts`, newPost).pipe(
catchError(error => {
console.error('Error adding post:', error);
return throwError(()=> new Error('Failed to add post.'));
})
);
}
}
حالا بیایید آن را اصلاح کنیم app.component.ts فایل برای استفاده از DataService:
import { Component, OnInit } from '@angular/core';
import { DataService } from './data.service';
@Component({
selector: 'app-root',
standalone: true,
templateUrl: './app.component.html',
styleUrl: './app.component.css'
})
export class AppComponent implements OnInit {
constructor(private dataService: DataService) { }
ngOnInit(): void {
// Fetch JSON data
this.dataService.getJsonData().subscribe({
next: data => {
console.log('JSON Data:', data)
},
error: error => {
console.error('Error fetching JSON data:', error)
}
});
// Fetch image
this.dataService.getImage().subscribe({
next: image => {
const reader = new FileReader();
reader.onload = () => {
console.log('Image:', reader.result);
};
reader.readAsDataURL(image);
},
error: error => {
console.error('Error fetching image:', error)
}
});
// Add a new post
const newPost = {
title: 'New Post',
body: 'Description of the new post'
};
this.dataService.addPost(newPost).subscribe({
next: response => {
console.log('Post added successfully:', response)
},
error: error => {
console.error('Error adding post:', error)
}
});
}
}
در نهایت، اجازه دهید به روز رسانی app.component.html فایل برای حذف محتوای پیش فرض:
<div style="text-align:center">
<h1>
Welcome to HttpClient Demo!
</h1>
</div>
اکنون می توانید برنامه را با استفاده از دستور زیر اجرا کنید:
ng serve
با این کار یک سرور توسعه راه اندازی می شود و شما باید بتوانید خروجی را در کنسول مرورگر مشاهده کنید.
نتیجه
در پایان، HttpClient ابزار قدرتمندی است که توسط Angular برای ایجاد درخواست های HTTP در برنامه های شما ارائه شده است. با دنبال کردن مراحل ذکر شده در این راهنما، می توانید به طور موثر HttpClient را برای تعامل با سرورها، واکشی داده ها و رسیدگی به انواع مختلف پاسخ ها راه اندازی و استفاده کنید.
برای دریافت کد کامل به لینک زیر مراجعه کنید👇👇👇
https://github.com/anthony-kigotho/http-client-demo