⚙️ Angular API-Integration – Clean, Typed, Testbar

(Baue eine starke Brücke zwischen Frontend & Backend)

Die API ist das Rückgrat jeder Angular-App. Aber:
Wie integrierst du sie sauber, typisiert und testbar?


1️⃣ Typisierung mit HttpClient + interfaces

Statt any verwende klar typisierte Interfaces:

export interface UserDto {
  id: string;
  name: string;
  email: string;
}

this.http.get<UserDto[]>('/api/users');

Nutze generische Typen überall – und vermeide unnötige any.


2️⃣ API-Service Layer (Separation of Concerns)

Erstelle eigene Services für HTTP-Calls:

@Injectable({ providedIn: 'root' })
export class UserApiService {
  constructor(private http: HttpClient) {}

  getUsers(): Observable<UserDto[]> {
    return this.http.get<UserDto[]>('/api/users');
  }
}

✅ Vorteil: Austauschbar, testbar, keine Logik im Component Code


3️⃣ Reactive State trennen

Trenne API-Aufrufe von UI-State. Beispiel mit SignalStore:

export const users = signal<UserDto[]>([]);

effect(() => {
  userApi.getUsers().subscribe((result) => users.set(result));
});

📌 Vermeide direktes .subscribe() in der Komponente.


4️⃣ Error-Handling & Retry

this.http.get('/api/data').pipe(
  retry(2),
  catchError((err) => {
    console.error('API Fehler:', err);
    return of([]);
  })
);

Schreibe zentrale Error-Handler (HttpInterceptor, ApiErrorService).


5️⃣ Unit Tests für API-Services

Nutze HttpTestingController aus @angular/common/http/testing:

httpMock.expectOne('/api/users').flush(mockUsers);

✅ Vorteil: Keine echten API-Calls im Test.


Fazit

Clean Architecture beginnt bei der API.
Typisierung, Separation und Testing sind Schlüssel für eine robuste Frontend-Backend-Kommunikation.


📚 Nächster Beitrag:
🧩 Angular Libraries – Struktur, Versionierung & Veröffentlichung

Hast du Fragen oder ein Projekt im Kopf?

Ich freue mich auf deine Nachricht. Lass uns gemeinsam deine Vision verwirklichen!

Jetzt Kontakt aufnehmen