import { Injectable } from '@angular/core'; import { Http, Response, Headers } from '@angular/http'; import { Observable } from 'rxjs/Rx'; import 'rxjs/add/operator/map' import { Beer } from './beer'; @Injectable() export class BeerService { private baseUrl: string = 'http://api.brewerydb.com/v2'; private keyUrl: string = '?key=5d7547f6f876fced03cb9166dff0e578'; constructor(private http : Http){} get(id: string): Observable { let beer$ = this.http .get( dbUrl(`${this.baseUrl}/beer/${id}${this.keyUrl}`) , {headers: this.getHeaders()}) .map(mapBeer); return beer$; } getAll(): Observable{ let beers$ = this.http .get( dbUrl(`${this.baseUrl}/beers${this.keyUrl}&styleId=1`) , {headers: this.getHeaders()}) .map(mapBeers); return beers$; } private getHeaders(){ let headers = new Headers(); headers.append('Accept', 'application/json'); return headers; } } function mapBeers(response:Response): Beer[]{ // The response of the API has a results // property with the actual results return response.json().data.map(toBeer) } function mapBeer(response:Response): Beer{ // toPerson looks just like in the previous example return toBeer(response.json().data); } function toBeer(r:any): Beer{ let beer = ({ id: r.id, name: r.name, description: (r.description || "No description") }); console.log('Parsed beer:', beer); return beer; } function dbUrl(url:string) : string { return 'http://kvewijk.nl/dbprox/?path=' + encodeURIComponent(url); }