Angular
HTTP
Simple Usage
1. Import it to the application module:
import { HttpClientModule } from '@angular/common/http'
imports: [
BrowserModule,
HttpClientModule
],
2. Inject HttpClient into your service:
constructor(private http: HttpClient) {
}
3. Use it:
public getUsers(): Observable<User[]> {
return this.http.get<User[]>(`${BASE_URL}`);
}
4. Call an API inside of your component:
this.usersService.getUsers().subscribe(
(response) => ...,
(error) => ...,
() => ...
)
Demo
Simple API Request
API Calls With Params
Pass count and text fragment as a query params
return this.http.get<User[]>(`${BASE_URL}`, {
params: {textFragment, count}
});
Full get method description:
get(url: string, options?: {
headers?: HttpHeaders | {
[header: string]: string | string[];
};
observe?: 'events' | 'response' | 'body';
params?: HttpParams | {
[param: string]: string | string[];
};
reportProgress?: boolean;
responseType?: 'arraybuffer' | 'blob' | 'text' | 'json';
withCredentials?: boolean;
}): Observable<any>;
GET (DELETE, HEAD, OPTIONS)
API Calls With Params
Create a new hero
return this.http.post<Hero>(`${BASE_URL}`, hero, httpOptions);
Full post method description:
post(url: string, body: any, options?: {
headers?: HttpHeaders | {
[header: string]: string | string[];
};
observe?: 'events' | 'response' | 'body';
params?: HttpParams | {
[param: string]: string | string[];
};
reportProgress?: boolean;
responseType?: 'arraybuffer' | 'blob' | 'text' | 'json';
withCredentials?: boolean;
}): Observable<any>
POST (PUT, PATCH)
Demo
API Call With Parameters
Error Handling
Handle error in the component:
public search(queryString: string): void {
this.usersWithParamsSubscription = this.usersService
.getUsersWithParams(queryString, this.countToLoad)
.subscribe(
(res: User[]) => {
this.users = res;
},
(error: HttpErrorResponse) => console.log(error)
)
}
Handle error in the service and retry:
public getUsersWithParams(textFragment: string, count: string): Observable<User[]> {
return this.http.get<User[]>(`${BASE_URL}`, { params: { textFragment, count } })
.pipe(
retry(4),
catchError(this.handleError)
);
}
Demo
Error Handling
Interceptors
Describe interceptor as a TypeScript class with @Injectable decorator:
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// Clone the request and replace the original headers with
// cloned headers, updated with the authorization.
const authReq = req.clone({
headers: req.headers.set('Authorization', 'Bearer token')
});
// Pass the request to the next handler
return next.handle(authReq);
}
}
Provide your interceptor:
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
Demo
Interceptors
Useful links
Q & A
Angular. HTTP
By Pavel Razuvalau
Angular. HTTP
- 793