AngularでNode.js APIを呼び出す方法|Webアプリ開発実践ノート Day06 | SORAXIOMラボ

Day06:AngularでAPIを呼び出す(HttpClientの基本)

スポンサーリンク
Webアプリ開発実践ノート

はじめに

Day05までで、Node.js側にAPIができた。

GET http://localhost:3000/hello

今回はこのAPIを、
Angularから呼び出して画面に表示する。

ここから一気に、

  • フロントとバックがつながる
  • Webアプリっぽさが出る
  • 責務分離の意味が実感できる

段階に入る。


今回のゴール

  • AngularでHttpClientを使えるようにする
  • APIを呼び出すServiceを作る
  • 画面に結果を表示する

① HttpClientを有効にする

まず app.module.ts に追加。

import { HttpClientModule } from '@angular/common/http';

@NgModule({
  declarations: [...],
  imports: [
    ...,
    HttpClientModule
  ],
})
export class AppModule {}

これを入れないとHTTPは使えない。


② API用Serviceを作る

Angularでは、
API呼び出しは Componentに直接書かない

Serviceに分離する。

// hello.service.ts

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

export interface HelloResponse {
  message: string;
}

@Injectable({
  providedIn: 'root'
})
export class HelloService {

  private apiUrl = 'http://localhost:3000/hello';

  constructor(private http: HttpClient) {}

  getHello(name?: string): Observable<HelloResponse> {
    return this.http.get<HelloResponse>(this.apiUrl, {
      params: name ? { name } : {}
    });
  }
}

ここで重要なのは、

  • 返ってくる型を明示している
  • URLをServiceに閉じ込めている

③ Componentから呼び出す

// app.component.ts

import { Component } from '@angular/core';
import { HelloService, HelloResponse } from './hello.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html'
})
export class AppComponent {

  message: string = '';

  constructor(private helloService: HelloService) {}

  loadMessage() {
    this.helloService.getHello('mame')
      .subscribe((res: HelloResponse) => {
        this.message = res.message;
      });
  }
}

④ HTML側

<button (click)="loadMessage()">APIを呼ぶ</button>

<p>{{ message }}</p>

ボタンを押すと、

  • Angular → Node.js API
  • JSON受信
  • message更新
  • 画面再描画

という流れが起きる。


ここで起きていること

流れを整理すると:

ボタン押す
  ↓
Component
  ↓
Service
  ↓
Node.js API
  ↓
JSON返却
  ↓
画面更新

フロントとバックが
HTTPという線でつながっている


Observableって何?

正直に言うと、
最初はよく分からなくて普通。

今は、

「非同期で値が返ってくる箱」

くらいの理解で十分。

subscribeしないと値が来ない、
それだけ覚えておけばOK。


なぜComponentに直接書かないのか

もしComponentに直接APIを書いたら、

  • 画面ロジック
  • APIロジック

が混ざる。

将来APIが変わったときに、
全部のComponentを修正することになる。

Serviceに分離しておけば、

  • URL変更
  • 共通処理追加

が1か所で済む。


Day06のまとめ

  • AngularはHttpClientでAPIを呼ぶ
  • API呼び出しはServiceに書く
  • Componentは表示担当
  • TypeScriptの型がフロントとバックをつなぐ

ここまで来ると、
「Webアプリの骨組み」が完成している。


次回予告

Day07:フォーム入力をAPIに送る(POST処理)

ここから
「読むアプリ」から「書き込むアプリ」に進む。

コメント

Copied title and URL