برنامه نویسی

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

نوشته های مشابه

همچنین ببینید
بستن
دکمه بازگشت به بالا