7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Angular

Angular-Anleitung für Anfänger: HTTP Anfragen

Scroll to top
Read Time: 11 mins
This post is part of a series called Beginner's Guide to Angular 4.
Beginner's Guide to Angular: Routing

German (Deutsch) translation by Ahmet Öztürk (you can also view the original English article)

Wenn Sie auf der Suche nach Angular-Schulungsmaterial sind, haben Sie Glück. Dieses Lehrmaterial zu Angular auf Deutsch wird Ihnen helfen, in kürzester Zeit loszulegen! Bei Angular HTTP geht es darum, die richtigen Techniken einzusetzen, um eine einseitige Angular HTML Anwendung zu erstellen, die HTTP-Anfragen erstellt und HTTP-Antworten auf einfache und skalierbare Weise verarbeitet. Das Paket @angular/common/http enthält einen Client, einen Interceptor und viele weitere Funktionen für Ihre Angular-Anwendung.

Single Page Applikationen müssen oft skaliert werden, und das Framework muss die richtige Mischung aus Tools und Techniken bieten, um dies zu unterstützen. Angular verfügt über viele eingebaute Tools, um anständig zu skalieren. Heute lernen Sie, wie Sie eine grundlegende Architektur für HTTP-Anfragen in Ihrer Anwendung einrichten und wie Sie Abfangmechanismen verwenden, um Ihre Anwendung skalierbar zu halten.

Groß oder klein, jede Angular-Anwendung wird einen Strom von HTTP-Anfragen haben. Sie werden HTTP-Anfragen senden und empfangen. Wie würden Sie Regeln anwenden und den Ablauf Ihrer Anfragen ändern? Interceptors sind Angular-Dienste, mit denen Sie dies erreichen können. Wie der Name schon sagt, können Sie jede gesendete Anfrage oder empfangene Antwort abfangen. Sie sind in der Lage, die Werte der Anfrage hinzuzufügen oder zu ändern.

Aber bevor Sie sich an HTTP-Abfangmechanismen (Interceptors) wagen, müssen Sie die Grundlagen von HTTP in Angular kennen. 

Die Grundstruktur des Projekts

Bevor wir loslegen, möchte ich Ihnen die Gesamtstruktur des Projekts vorstellen. Sie finden das fertige Projekt live in diesem GitHub Repository.

1. Ihr Projekt für HTTP vorbereiten

HttpClient ist eine eingebaute Service-Klasse aus dem Angular-Paket: @angular/common/http. Wenn Sie in Angular über ein HTTP-Protokoll kommunizieren wollen, können Sie fetch oder XMLHttpRequest verwenden. In jedem Fall erfolgt die Kommunikation über HttpClient. Diese Serviceklasse verfügt über viele interessante Signaturen und Rückgabetypen.

Interessante Merkmale des HttpClient sind:

  • Ausführen von GET, POST, PUT und DELETE Anfragen
  • So können Sie alle Ihre Fehlerbehandlungsstrategien optimieren
  • Fangen Sie jede gesendete HTTP-Anfrage oder empfangene Antwort ab 
  • Erstellen Sie typisierte Anfrage- oder Antwortobjekte
  • Einführen von RxJS Observablen

Schritt 1: Importieren von HttpClient in app.module.ts

Um HttpClient verwenden zu können, müssen Sie das HttpClientModule in Ihrer app.module.ts Datei importieren. Und dies sollte Teil des Arrays imports in Ihrem NgModule sein.

Mit der obigen Deklaration sind Sie bereit, den HttpClient in Ihren Komponenten zu verwenden. Um auf den HttpClient in einer Komponente zuzugreifen, müssen Sie einen Service erstellen, und zwar einen Injectable Service. Für unseren Zweck werden wir einen Dienst erstellen, der auf Root-Ebene injiziert werden kann.

Schritt 2: Erstellen eines injizierbaren Dienstes

Ein Injectable ist ein Dekorator, der in Angular verwendet werden kann. Er wird mit Metadaten wie provideIn geliefert. Wenn provideIn auf root gesetzt ist, können Sie den Dienst in Ihrer gesamten Anwendung verwenden. Die Komponente sollte nach dem Dienst definiert werden. Wenn die Komponente vor einem Dienst definiert wird, wird zur Laufzeit ein Nullreferenzfehler ausgegeben.

Jeder injizierbare Dienst hat das folgende Grundgerüst. In unserem Beispielprojekt finden Sie einen injizierbaren Service in der Datei parent.service.ts. Er bietet alle APIs, die von parent.component.ts.

Nun lassen Sie uns das obige Skelett verbessern und dafür sorgen, dass es Daten von einer API abruft. Wenn Sie neu im Bereich HTTP sind, haben wir einen großartigen Beitrag, der Ihnen hilft, die Grundlagen zu erlernen

Schritt 3: Verwendung der Injectable Services

In unserer Datei parent.service.ts finden Sie viele Getter-API-Aufrufe. Diese APIs werden von parent.component.ts aus aufgerufen. Werfen wir einen kurzen Blick auf parent.component.ts, die für den Aufruf der Methoden in parent.service.ts verwendet wird.

Was wir hier erreichen wollen, ist eine Injektion des Dienstes, der zum Abrufen von Benutzern erstellt wurde.

  1. Wir abonnieren die Methode des Dienstes.
  2. In dem Moment, in dem wir diese Methode ausführen, werden wir die GET-Anfrage ausführen und das Antwort-/Fehlerobjekt empfangen. 

In unserem Beispiel haben wir drei verschiedene Schaltflächen, die jeweils auf eine andere Methode im injizierbaren Dienst verweisen. 

Die obige Komponente sieht wie folgt aus. Im Screenshot habe ich auf die Schaltfläche Alle Benutzer abrufen geklickt und die Ergebnisse wurden erfolgreich angezeigt. 

results pageresults pageresults page

Schritt 4: Konfigurieren eines HttpInterceptor

Wie bereits erwähnt, können Sie die Werte einer beliebigen Anfrage hinzufügen oder ändern. In einer Anwendung können Sie mehrere Interceptoren haben. Deshalb ist es wichtig, dass Sie den Interceptor als Provider in app.module.ts registrieren. Wenn der Interceptor hier nicht registriert ist, kann er die Anfragen, die wir über den HttpClient-Dienst stellen, nicht abfangen.

Einer der Interceptoren in unserem Projekt befindet sich in utility/header.interceptor.ts. Und wir müssen es in app.module.ts importieren. 

Die Syntax für das Hinzufügen von Interceptoren in Ihrer @NgModule Konfiguration lautet:

Schritt 5: Erstellen des HttpInterceptors

Um einen Interceptor zu erstellen, muss die Schnittstelle HttpInterceptor, die in @angular/common/http verfügbar ist, implementiert werden. Jedes Mal, wenn Ihre Angular-Anwendung über den HttpClient-Dienst eine Anfrage stellt oder eine Antwort über das HTTP-Protokoll erhält, wird die intercept-Methode des Interceptors aufgerufen. 

Die Methode intercept hat folgende Struktur:

  • Input: nimmt einen Verweis auf das httpRequest Objekt entgegen
  • Purpose: inspiziert und modifiziert das httpRequest Objekt nach Bedarf
  • Output: ruft next.handle mit dem modifizierten httpRequest
  • auf

Schritt 6: Abfangen des Headers

Weil wir das Abfangen gelernt haben, fügen wir allen unseren API-Anfragen einen Header hinzu. Hier fügen wir eine neue Kopfzeile namens ANGULAR_TUTS_INTERCEPTOR zu unserer get-Anfrage hinzu. Wie bereits erwähnt, können wir im Code mehrere Interceptoren verwenden. Vergessen Sie nicht, den Interceptor richtig zu benennen, damit Sie den Code besser identifizieren und pflegen können.

Hier ist ein Screenshot des Headers, der in unsere GET-Anfrage eingefügt wird. 

die Kopfzeile, die in unserer GET-Anfrage enthalten ist. die Kopfzeile, die in unserer GET-Anfrage enthalten ist. die Kopfzeile, die in unserer GET-Anfrage enthalten ist. 

Schritt 7: Abfangen des Antwortkörpers

Neben dem Abfangen der Kopfzeile einer Anfrage können wir auch den Antwortkörper verändern. Den Code zum Abfangen des Antwortkörpers finden Sie in response.interceptor.ts. Hier verwenden wir die HttpResponse und fügen einen neuen Parameter namens projectCode in den Body ein. Wenn die Antwort in unserer Komponente gedruckt wird, sehen Sie projectCode in der Ausgabe. 

Mit dem neuen ResponseInterceptor sieht unsere app.module.ts wie folgt aus:

In diesem Screenshot können Sie den Response Interceptor in Aktion sehen. Wir haben projectCode hervorgehoben, um den neu hinzugefügten Parameter in der Antwort zu zeigen.

response interceptor in Aktion.response interceptor in Aktion.response interceptor in Aktion.

Schritt 8: Fehler Behandlung

Interceptoren helfen uns, Fehler besser zu behandeln. Eine API gibt nicht immer das erwartete Ergebnis zurück. Manchmal, wenn der Server nicht erreichbar ist oder die Anfrage nicht den richtigen Body enthält, werden Sie zwangsläufig einen Fehler erhalten. Aus diesem Grund ist die Fehlerbehandlung extrem wichtig. In unserer Datei error.interceptor.ts haben wir eine einfache Logik für die Fehlerbehandlung hinzugefügt. Die API-Anfrage wird viermal wiederholt, bis der letzte Fehler an die Komponente ausgegeben wird.

Einer der wichtigsten Aspekte in diesem Code ist die Verwendung von RxJS. Später in diesem Tutorial werden wir sehen, warum RxJS wichtig ist.

Wir müssen app.module.ts mit dem neuen ErrorInterceptor verbessern. Die Datei sieht wie folgt aus.

Hier ist ein Screenshot, der das Verhalten von error.interceptor.ts. zeigt. Wie Sie sehen können, wird dieselbe API-Anfrage auf der Registerkarte Netzwerk mehrfach gestellt.

Verhalten von error.interceptor.ts.Verhalten von error.interceptor.ts.Verhalten von error.interceptor.ts.

Tipps und Tricks zur Verwendung von @angular/common/http

HttpParams

HTTP Get kann mehrere Query String Parameter haben. Hier ist ein einfaches Beispiel:

In dem obigen Ausschnitt gibt es einen Query-String-Parameter: page = 2. Mit dem Paket @angular/common/http können Sie ganz einfach Query String Parameter hinzufügen. Um dies zu erreichen, müssen Sie HttpParams aus dem Paket importieren. HttpParams ist unveränderlich. Alle API-Methoden, die mit HttpParams verknüpft sind, führen zu keinerlei Objektveränderung. Deshalb müssen wir den Aufruf der Methode set verketten. Wenn Sie versuchen, HttpParams auf andere Weise zu setzen, wird das nicht funktionieren. Stattdessen erhalten Sie ein leeres HttpParams Objekt. 

Was würden Sie tun, wenn die URL aus vorhandenen Query-String-Parametern besteht? In diesem Fall können Sie fromString verwenden. fromString ist ein Teil von HttpParams, und hier sehen Sie, wie Sie ihn verwenden können:

HttpHeaders

Als nächstes wollen wir verstehen, wie man HTTP-Header liest und setzt. Wenn Sie noch nicht mit HTTP vertraut sind, empfehlen wir Ihnen, unseren Post über HTTP zu lesen. 

HTTP-Header machen bei jeder HTTP-Anfrage oder -Antwort einen großen Unterschied. Einige Header werden automatisch in die Anfrage eingefügt, andere können Sie selbst in die Anfrage einfügen. Um dies zu erreichen, müssen Sie die Klasse HttpHeaders aus @angular/common/http verwenden. Genau wie HttpParams ist auch HttpHeaders unveränderlich. 

RxJS

Die Aufgabe von RxJS besteht darin, sicherzustellen, dass pro Subscription nur eine HTTP-Anfrage gestellt wird. In Ihrem Code kann es häufig zu doppelten Anfragen kommen. Dies beeinträchtigt die Leistung und kann sogar zum Abbruch Ihrer Anwendung führen. Wenn Sie möchten, dass Daten nur einmal vom Back-End abgefragt werden, sollten Sie RxJS verwenden.

Auch wenn HTTP-Anfragen parallel erfolgen und die Ergebnisse kombiniert werden müssen, können wir forkJoin aus der RxJS-Bibliothek verwenden. 

Wenn Sie möchten, dass Ihre HTTP-Anfragen in einer Reihenfolge ausgeführt werden und das Ergebnis der ersten Anfrage zum Aufbau der zweiten Anfrage verwendet werden soll, können Sie switchMap verwenden. Dies sind nur zwei der häufigen Anwendungsfälle für RxJS.

Ein weiterer wichtiger Aspekt von RxJS sind die Operatoren. Diese Bibliothek bietet Operatoren wie map und filter, die zusammen mit next.handle verwendet werden können.

Abschluss

Wir sind am Ende dieses Tutorials über Angular HTTP angelangt. Das Stellen von Anfragen und das Warten auf Antworten ist ein unvermeidlicher Schritt in jeder einseitigen Anwendung. Es ist wichtig, eine skalierbare Anwendung zu bauen, die einfach zu warten ist. Nutzen Sie die Bibliothek @angular/common/http zusammen mit RxJS, um den HTTP-Workflow Ihres Clients zu erstellen.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.