AngularのHttpClientの使い方!ヘッダー・インターセプター・パラメーターなど。
この記事では、AngularのHttpClientModuleを使用したバックエンド通信の方法を初心者向けに説明する。
Angularを使用してWebアプリケーションを開発するならば、必ずといっていいほど使用することになるのがHttpClientModuleだ。
バックエンドとの通信はハマりやすいポイント。基本的な使用方法を身に着けておいて実務の際に困らないように備えておきたい。
HttpClientとは?
HttpClientはAngularに標準で備わっている、HTTPプロトコルを使ったバックエンド通信のためのAPI。
HttpClientModuleはそれまでのHttpModuleに代わりAngular 4.3から導入された。
HttpClientModuleでは、インターセプターやエラー処理といった機能が追加されている。
バックエンドシステムを使用することができないユニットテストにおいてはHttpClientTestingModuleを使用する。
HttpClientを導入する
では、HttpClientの使い方を見ていこう。
HttpClientModuleをインポートする
HttpoClientを使用する場合は、HttpClientModuleをapp.module.tsにインポートする。
import {HttpClientModule} from '@angular/common/http';
@NgModule({
imports: [
BrowserModule,
HttpClientModule // HttpClientModuleはBrowserModuleの後に追加する。
],
declarations: [
AppComponent,
],
bootstrap: [ AppComponent ]
})
export class AppModule {}
あとはHttpClientを使用するサービスのコンストラクタでHttpClientを呼び出す。
import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';
@Injectable()
export class UserService {
constructor(private _httpClient: HttpClient) { }
}
HttpClientのCRUDオペレーション
リクエストのタイプ別にHttpClientの使用例を見ていこう。
GETリクエスト
まずはデータベースにあるオブジェクトを取得するために使われるGETリクエストから見ていこう。
public users: UserInfo[];
getUsers() {
this._httpClient.get<UserInfo[]>('https://localhost:8000/backend/users').subscirbe(userResponse => {
this.users = userResponse;
});
}
HttpClientを使用する場合、基本的にレスポンスはObservavleタイプで受け取ることになる。
受け取ったオブジェクトをテンプレートにおいて使用する際はasyncパイプを使用する。
レスポンスはPromiseに変換して受け取ることもできる。
なお、Observableタイプについて深く知りたい人はこちらの記事を読んでほしい。
POSTリクエスト
新しいオブジェクトをバックエンドのデータベースに追加する際はPOSTリクエストを利用する。
saveNewUser(user: UserInfo) {
this._httpClient.post('https://localhost:8000/backend/user', user).subscirbe(userResponse => {
console.log('New user is successfully added. ' + userResponse);
});
}
DELETE リクエスト
特定のオブジェクトを削除する場合は、DELETEリクエストが使用される。
removeUser(userId: number) {
this._httpClient.delete('https://localhost:8000/backend/user/' + useId).subscirbe(response => {
console.log('User is successfully removed. ' + response);
});
}
PUTリクエスト
PUTリクエストはオブジェクトの内容をアップデートするために使用される。
updateUser(user: UserInfo) {
this._httpClient.put('https://localhost:8000/backend/user/' + useId, user).subscirbe(response => {
console.log('User is successfully updated. ' + response);
});
}
HttpClientの使い方
その他のHttpClientの知っておきたい使い方について紹介してく。
ヘッダー HttpHeaders
HttpClientでは、HttpHeadersオブジェクトにヘッダー情報を代入する。
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
Authorization: 'my-token'
})
};
インターセプター Interceptor
HttpClientではインターセプターを使用して、リクエストとレスポンスに対し処理をおこなうことができる。
ここではよく使用されるトークンのインターセプターを例にして、実装方法を紹介したい。
export class TokenInterceptor implements HttpInterceptor {
constructor(private authService: AuthService) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
setHeaders: {Authorization: `Bearer ${this.authService.getToken()}`}
});
return next.handle(request);
}
}
作成したインターセプターはapp.module.tsのprovidesプロパティで宣言することにより使用することができる。
providers: [ { provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor }]
URLパラメーター HttpParams
HttpClinetで使用できるパラメーターには幾つかの種類があるが、ここではもっともよく使われるURLにパラメーターを挿入する方法を紹介したい。
getUserById(id: number): Observable<UserIno> {
const options = term ? { params: new HttpParams().set('userId', id) } : {};
return this._httpClient.get<UserInfo>('https://localhost:8000/backend/user', options);
}