기상정보 API
Endpoint : GET api/weatherforecast
닷넷 코어 API를 만들면 기본으로 생성되는 더미 API이며
랜덤한 기상정보의 컬렉션을 내려다 준다. 이것을 사용하여 Angular에서 뷰화면을 구현해보자
[ { date: "2020-10-03T15:18:15.0754333+09:00", temperatureC: -6, temperatureF: 22, summary: "Bracing", }, { date: "2020-10-04T15:18:15.0770259+09:00", temperatureC: 33, temperatureF: 91, summary: "Chilly", }, { date: "2020-10-05T15:18:15.0770329+09:00", temperatureC: -18, temperatureF: 0, summary: "Sweltering", }, { date: "2020-10-06T15:18:15.0770334+09:00", temperatureC: -10, temperatureF: 15, summary: "Freezing", }, { date: "2020-10-07T15:18:15.0770335+09:00", temperatureC: 12, temperatureF: 53, summary: "Balmy", }, ]
프론트 작업순서
- 대응 모델 생성
- 대응 서비스(어댑터) 생성
- UI Component 작성
# UI Component 생성 ng generate component ./components/weatherforecast # UI가 사용할 서비스 추가 ng generate service ./services/weatherforecast # 모델 ng g class ./models/Weather --type=model
직접코드도 가능할테지만, 위와같이 AngularCli를 이용하면 필요한 요소의 템플릿코드 작성을 할수가 있다.
모델 생성
export class Weather { date: string; temperatureC: number; temperatureF: number; summary: string; }
TS(TypeScript)가 대중화가 되기전, 스크립트형 개발방법에서 타잎을 지정하는것에 거부감이 있었던적이 존재했다.
코드가 비대해질수록 리팩토링,타잎유닛검사,실행전 에러검출등 TS가 유리한것은 사실이며
이것은, TS를 지원하는 개발툴의 지원으로 빠른 프로토타잎과 개발이라는 장점도 함께 가져감으로
빠른 장점을 가진 동적 타잎이 사실은 타잎세이프하지 않은 개발방식이며 JS진영에서도 OOP와 함께 TypeSafe한 개발방식이 대중화 되기 시작하였다.
서비스생성
import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Weather } from '../models/weather.model'; import { Observable } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class WeatherforecastService { private weatherUrl = 'api/weatherforecast/'; constructor(private http: HttpClient) { console.log("Create WeatherforecastService"); } /** GET heroes from the server */ getWeather(): Observable<Weather[]> { console.log("Get Weather"); //TODO: 로깅모듈로 변경하기 return this.http.get<Weather[]>(this.weatherUrl) } }
UI 컴포넌트
결과
app.component.html
<p>Admin Start</p> <a href="https://angular.io/tutorial" target="_blank">앵귤라 듀토리얼</a> <app-weatherforecast></app-weatherforecast> <router-outlet></router-outlet>