HTTP-Client in Angular: HTTP-Anfragen, API-Daten und Fehlerbehandlung

März 10, 2025Web-Frameworks

In modernen Webanwendungen ist die Kommunikation mit Backend-APIs eine zentrale Aufgabe. Angular bietet mit seinem HTTP-Client-Modul ein leistungsstarkes Tool, um HTTP-Anfragen durchzuführen, API-Daten zu verarbeiten und eine robuste Fehlerbehandlung zu implementieren. In diesem Artikel lernst du, wie du den Angular HTTP-Client verwendest, um API-Daten abzufragen und wie du mit häufigen Fehlern umgehst.

Was ist der Angular HTTP-Client?

Der Angular HTTP-Client ist ein Service, der im `@angular/common/http` Modul enthalten ist. Er bietet eine einfache API, um HTTP-Anfragen wie GET, POST, PUT und DELETE an externe APIs zu senden und die Ergebnisse zu verarbeiten. Der HTTP-Client basiert auf Observables (von RxJS), was eine asynchrone Kommunikation ermöglicht und das Reagieren auf Datenänderungen vereinfacht.

Schritt 1: Einrichten des HTTP-Client-Moduls

Um den HTTP-Client in deiner Anwendung zu verwenden, musst du das Modul `HttpClientModule` importieren. Dies geschieht in der Regel in der Hauptmoduldatei (`app.module.ts`):

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule  // Import des HTTP-Client-Moduls
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Schritt 2: Durchführen von HTTP-Anfragen

Der HTTP-Client stellt verschiedene Methoden zur Verfügung, um HTTP-Anfragen durchzuführen, z. B. GET, POST, PUT, DELETE, PATCH usw.

Beispiel: GET-Anfrage

Nehmen wir an, du möchtest Daten von einer API abrufen. Dazu kannst du den HTTP-Client verwenden, um eine GET-Anfrage zu senden.

Service: Zuerst erstellst du einen Service, der die API-Anfragen verwaltet. Der HTTP-Client wird in diesen Service injiziert, um Anfragen an die API zu stellen.

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

@Injectable({
  providedIn: 'root'
})

export class ApiService {
  private apiUrl = 'https://jsonplaceholder.typicode.com/posts';
  constructor(private http: HttpClient) {}
  getPosts(): Observable<any> {
    return this.http.get(this.apiUrl);
  }
}

In diesem Beispiel verwendet der Service die `get()`-Methode des HTTP-Clients, um Daten von einer öffentlichen API abzurufen. Die Methode `getPosts()` gibt ein Observable zurück, das später in der Komponente abonniert werden kann.

Komponente: Nun verwenden wir diesen Service in einer Komponente, um die API-Daten abzurufen und anzuzeigen.

import { Component, OnInit } from '@angular/core';
import { ApiService } from './api.service';

@Component({
  selector: 'app-post-list',
  template: `
    <ul>
      <li *ngFor="let post of posts">{{ post.title }}</li>
    </ul>
})

export class PostListComponent implements OnInit {
  posts: any[] = [];
  constructor(private apiService: ApiService) {}
  ngOnInit(): void {
    this.apiService.getPosts().subscribe((data: any[]) => {
      this.posts = data;
    });
  }
}

In der `PostListComponent` wird der Service über den Konstruktor injiziert. Die `getPosts()`-Methode wird abonniert, um die zurückgegebenen Daten zu empfangen und sie in der Komponente anzuzeigen. Das Observable stellt sicher, dass die Daten asynchron verarbeitet werden.

Beispiel: POST-Anfrage

Neben dem Abrufen von Daten kannst du auch Daten an eine API senden, z. B. durch eine POST-Anfrage. Hier ein Beispiel für eine POST-Anfrage mit dem HTTP-Client:

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

@Injectable({
  providedIn: 'root'
})

export class ApiService {
  private apiUrl = 'https://jsonplaceholder.typicode.com/posts';
  constructor(private http: HttpClient) {}
  createPost(postData: { title: string; body: string }): Observable<any> {
    return this.http.post(this.apiUrl, postData);
  }
}

Die Methode `createPost()` sendet die POST-Anfrage an die API, indem sie `post()` verwendet und die Daten im JSON-Format sendet.

In der Komponente kannst du diese Methode aufrufen, um neue Beiträge zu erstellen:

import { Component } from '@angular/core';
import { ApiService } from './api.service';

@Component({
  selector: 'app-create-post',
  template: `
    <form (ngSubmit)="onSubmit()">
      <input [(ngModel)]="title" placeholder="Titel" name="title">
      <textarea [(ngModel)]="body" placeholder="Inhalt" name="body"></textarea>
      <button type="submit">Erstellen</button>
    </form>
})

export class CreatePostComponent {
  title = '';
  body = '';
  constructor(private apiService: ApiService) {}
  onSubmit() {
    const postData = { title: this.title, body: this.body };
    this.apiService.createPost(postData).subscribe(response => {
      console.log('Beitrag erstellt:', response);
    });
  }
}

In diesem Beispiel wird ein Formular verwendet, um Benutzerdaten zu erfassen und mit der POST-Anfrage an die API zu senden.

Umgang mit API-Daten und Observables

Der Angular HTTP-Client verwendet Observables, um asynchrone Datenflüsse zu handhaben. Dies bedeutet, dass HTTP-Anfragen erst dann ausgeführt werden, wenn sie abonniert werden. Ein Vorteil der Verwendung von Observables ist die Fähigkeit, fortlaufend auf Datenänderungen zu reagieren und leistungsstarke Operatoren von RxJS zu nutzen.

Abonnieren eines Observables

Sobald du eine HTTP-Anfrage stellst, kannst du das Observable mit der `subscribe()`-Methode abonnieren. Diese Methode empfängt die Daten, sobald sie von der API zurückgegeben werden.

this.apiService.getPosts().subscribe(data => {
  console.log(data);
});

Durch die Verwendung von Observables kannst du auch auf Ereignisse wie Fehler oder die vollständige Beendigung der Anfrage reagieren:

this.apiService.getPosts().subscribe(
  data => console.log('Erfolg:', data),
  error => console.error('Fehler:', error),
  () => console.log('Anfrage abgeschlossen')
);

Fehlerbehandlung mit dem HTTP-Client

Fehler sind bei der Kommunikation mit APIs unvermeidbar. Der Angular HTTP-Client bietet eine eingebaute Fehlerbehandlung, die auf HTTP-Statuscodes und andere Fehlerquellen reagieren kann.

Beispiel: Fehler abfangen und behandeln

Die Fehlerbehandlung erfolgt durch das Abfangen des Fehlers im `catchError()`-Operator von RxJS:

import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})

export class ApiService {
  private apiUrl = 'https://jsonplaceholder.typicode.com/posts';
  constructor(private http: HttpClient) {}

  getPosts(): Observable<any> {
    return this.http.get(this.apiUrl).pipe(
      catchError(this.handleError)
    );
  }

  private handleError(error: HttpErrorResponse) {
    if (error.error instanceof ErrorEvent) {
      // Client-seitiger Fehler
      console.error('Ein Client-Fehler ist aufgetreten:', error.error.message);
    } else {
      // Server-seitiger Fehler
      console.error(`Backend hat mit dem Status ${error.status} geantwortet, Fehlerkörper war:`, error.error);
    }
    // Benutzerfreundliche Nachricht zurückgeben
    return throwError('Etwas ist schiefgelaufen; bitte versuchen Sie es später erneut.');
  }
}

In diesem Beispiel verwendet der Service den `catchError()`-Operator, um Fehler abzufangen und zu verarbeiten. Der Fehler wird dann mithilfe von `throwError()` als Observable zurückgegeben, sodass die aufrufende Komponente ihn behandeln kann.

Fazit

Der Angular HTTP-Client ist ein leistungsstarkes Werkzeug, um HTTP-Anfragen durchzuführen, API-Daten zu verarbeiten und Fehler zu handhaben. Durch die Verwendung von Observables bietet er eine asynchrone, reaktionsfähige Architektur für die Datenverarbeitung in modernen Webanwendungen. Egal, ob du einfache GET- oder komplexe POST-Anfragen durchführst, der HTTP-Client bietet dir die Flexibilität, effizient mit Backend-APIs zu kommunizieren.

Let’s talk business

Kontaktieren Sie uns und lassen Sie sich bei einem kostenlosen Erstgespräch von uns beraten. Wir freuen uns darauf, Sie kennenzulernen.

“Gemeinsam gestalten wir ihre digitale Identität”

Philipp Zimmermann

Philipp Zimmermann

Ihr Ansprechpartner

11 + 13 =