封装 API 请求

将 HTTP 处理逻辑封装在自己的类中可能是个好主意。以下类公开了获取帖子的方法。它调用 http.get() 方法并在返回的 Observable 上调用 .mapResponse 对象转换为 Post 对象。

import {Injectable} from "@angular/core";
import {Http, Response} from "@angular/http";

@Injectable()
export class BlogApi {

  constructor(private http: Http) {
  }

  getPost(id: number): Observable<Post> {
    return this.http.get(`https://jsonplaceholder.typicode.com/posts/${id}`)
      .map((response: Response) => {
        const srcData = response.json();
        return new Post(srcData)
      });
  }
}

前面的示例使用 Post 类来保存返回的数据,如下所示:

export class Post { 
  userId: number;
  id: number;
  title: string;
  body: string;

  constructor(src: any) {
      this.userId = src && src.userId;
      this.id = src && src.id;
      this.title = src && src.title;
      this.body = src && src.body;
  }
}

现在,一个组件可以使用 BlogApi 类来轻松检索 Post 数据,而无需考虑 Http 类的工作。