Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

HTTP Observables

HTTP Observables allow you to perform asynchronous HTTP requests and handle responses using RxJS in Angular. This guide covers the basics of using HTTP Observables for efficient data management in your Angular applications.

Setting Up HTTPClientModule

First, import the HttpClientModule into your app module:

// 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';
import { DataService } from './data.service';
import { HomeComponent } from './home/home.component';

@NgModule({
  declarations: [AppComponent, HomeComponent],
  imports: [BrowserModule, HttpClientModule],
  providers: [DataService],
  bootstrap: [AppComponent]
})
export class AppModule { }

Creating a Service

Next, create a service to manage HTTP requests using the Angular CLI command:

$ ng generate service data

This command generates a new service file named data.service.ts.

Using HTTP Observables

In the service file, inject the HttpClient and create methods to perform HTTP requests and return Observables:

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

@Injectable({
  providedIn: 'root'
})
export class DataService {
  private apiUrl = 'https://jsonplaceholder.typicode.com/posts';

  constructor(private http: HttpClient) { }

  getPosts(): Observable {
    return this.http.get(this.apiUrl);
  }

  addPost(post: any): Observable {
    return this.http.post(this.apiUrl, post);
  }

  updatePost(id: number, post: any): Observable {
    const url = `${this.apiUrl}/${id}`;
    return this.http.put(url, post);
  }

  deletePost(id: number): Observable {
    const url = `${this.apiUrl}/${id}`;
    return this.http.delete(url);
  }
}

Subscribing to Observables

Inject the service into your component's constructor and subscribe to the Observables to handle the responses:

// home.component.ts
import { Component, OnInit } from '@angular/core';
import { DataService } from '../data.service';

@Component({
  selector: 'app-home',
  template: `
    

Posts

  • {{ post.title }}
` }) export class HomeComponent implements OnInit { posts: any[] = []; constructor(private dataService: DataService) {} ngOnInit() { this.dataService.getPosts().subscribe(data => { this.posts = data; }); } }

Handling Errors

To handle errors in your HTTP Observables, use the catchError operator from RxJS:

// data.service.ts
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 DataService {
  private apiUrl = 'https://jsonplaceholder.typicode.com/posts';

  constructor(private http: HttpClient) { }

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

  addPost(post: any): Observable {
    return this.http.post(this.apiUrl, post).pipe(
      catchError(this.handleError)
    );
  }

  updatePost(id: number, post: any): Observable {
    const url = `${this.apiUrl}/${id}`;
    return this.http.put(url, post).pipe(
      catchError(this.handleError)
    );
  }

  deletePost(id: number): Observable {
    const url = `${this.apiUrl}/${id}`;
    return this.http.delete(url).pipe(
      catchError(this.handleError)
    );
  }

  private handleError(error: HttpErrorResponse) {
    console.error('Server Error:', error);
    return throwError('Something went wrong with the request.');
  }
}

Key Points

  • HTTP Observables allow you to perform asynchronous HTTP requests and handle responses using RxJS.
  • Import HttpClientModule in your app module to set up the HTTP Client.
  • Create a service to handle HTTP requests and return Observables using the HttpClient.
  • Subscribe to Observables in your components to handle the responses.
  • Handle errors using the catchError operator from RxJS.

Conclusion

HTTP Observables are a powerful tool for managing asynchronous data in Angular applications. By setting up the HTTPClientModule and using the HTTPClient with Observables, you can efficiently handle HTTP requests and responses. Happy coding!