Blogger Jateng

Menangani Panggilan API dan Manajemen Data di Angular SPA

Aplikasi Halaman Tunggal (SPA) yang dibangun dengan Angular membutuhkan manajemen data yang efisien dan penanganan panggilan API untuk memastikan pengalaman pengguna yang mulus. Karena SPA sangat bergantung pada API untuk pengambilan dan pembaruan data, pengembang harus mengadopsi praktik terbaik untuk membuat panggilan API, menangani respons, caching, dan mengoptimalkan kinerja. Artikel ini membahas strategi yang efektif untuk mengelola panggilan API dan penanganan data di Angular SPA.

Membuat Panggilan API di Angular

Angular memiliki modul bawaan, HttpClientModule, yang dibuat untuk berinteraksi dengan API melalui layanan HttpClient. Pengembang harus mengimpor modul dan menyuntikkan layanan HttpClient ke dalam komponen atau layanan mereka untuk menggunakannya.

sumber: gitconnected.com

Mengimpor dan menggunakan HttpClient

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class ApiService {
  private apiUrl = 'https://api.example.com/data';

  constructor(private http: HttpClient) {}

  getData(): Observable<any> {
    return this.http.get<any>(this.apiUrl);
  }
}

Ini adalah layanan yang memanggil API eksternal. Perhatikan bagaimana metode getData() mengembalikan sebuah Observable, sehingga komponen dapat berlangganan respons.

Bekerja dengan Respons dan Kesalahan API

Penanganan kesalahan merupakan konsep penting yang membantu memastikan pengalaman pengguna yang baik dan kemudahan dalam melakukan debug. Menggunakan RxJS catchError untuk menangani kesalahan dengan baik.

import { catchError } from 'rxjs/operators';
import { throwError } from 'rxjs';

getData(): Observable<any> {
  return this.http.get<any>(this.apiUrl).pipe(
    catchError(error => {
      console.error('Error fetching data:', error);
      return throwError(() => new Error('Failed to load data'));
    })
  );
}

Caching untuk Mengoptimalkan Panggilan API

Melakukan pemanggilan API yang berlebihan atau berlebihan untuk mengambil data yang dibutuhkan dapat berdampak pada kinerja. Hal ini dapat dikurangi sampai batas tertentu dengan menggunakan caching - menyimpan respons dan menayangkannya dari memori ketika diminta.

Solusi caching sederhana dapat diimplementasikan dengan menggunakan BehaviorSubject dalam sebuah layanan:

import { BehaviorSubject, of } from 'rxjs';
import { tap } from 'rxjs/operators';

private cache$ = new BehaviorSubject<any>(null);

getCachedData(): Observable<any> {
  if (this.cache$.getValue()) {
    return of(this.cache$.getValue());
  }
  return this.http.get<any>(this.apiUrl).pipe(
    tap(data => this.cache$.next(data))
  );
}

Hal ini memastikan bahwa data hanya diambil ketika diperlukan dan disimpan untuk penggunaan selanjutnya.

Penangan API Global dengan Interceptors

Pengembang dapat menggunakan pencegat untuk melakukan hal-hal seperti menambahkan token autentikasi, mencatat permintaan, dan secara konsisten menangani kesalahan di berbagai panggilan API.

Contoh penggunaan interceptor HTTP untuk menambahkan token autentikasi:

import { HttpInterceptor, HttpRequest, HttpHandler } from '@angular/common/http';

import { Injectable } from '@angular/core';


@Injectable()

export class AuthInterceptor implements HttpInterceptor {

  intercept(req: HttpRequest<any>, next: HttpHandler) {

    const clonedRequest = req.clone({

      setHeaders: { Authorization: `Bearer token_value` }

    });

    return next.handle(clonedRequest);

  }

}

Untuk menggunakan pencegat, sediakan di app.module.ts:

providers: [{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }] 

Manajemen Status yang Efisien dengan NgRx

Dalam kasus aplikasi yang kompleks, Anda dapat membantu mereka menjaga data tetap terpusat dengan menggunakan pustaka manajemen state seperti NgRx. NgRx dibangun di atas pola Redux yang berarti state aplikasi dapat diprediksi dengan menggunakan aksi, reduksi, dan efek. 

Contoh tindakan dalam NgRx:

import { createAction, props } from '@ngrx/store';

export const loadData = createAction('[Data] Load Data');
export const loadDataSuccess = createAction('[Data] Load Data Success', props<{ data: any }>());
export const loadDataFailure = createAction('[Data] Load Data Failure', props<{ error: any }>());

Pendekatan ini membantu menjaga agar panggilan API dan manajemen data tetap terstruktur dan terukur.

Kesimpulan

Menangani pemanggilan API secara efisien di Angular SPA sangat penting untuk kinerja dan pengalaman pengguna. Dengan memanfaatkan HttpClient, operator RxJS, mekanisme caching, interceptor, dan pustaka manajemen state seperti NgRx, pengembang dapat membangun aplikasi Angular yang dapat diskalakan, efisien, dan mudah dipelihara. Menerapkan praktik terbaik ini memastikan bahwa interaksi API tetap lancar dan dioptimalkan untuk kasus penggunaan di dunia nyata. 

Kembali ke>>>> Membangun Aplikasi Halaman Tunggal (SPA) dengan Angular