Skip to content

Instantly share code, notes, and snippets.

@svdamani
Created August 18, 2018 10:37
Show Gist options
  • Save svdamani/d5e9db72ca5993ff999e3f51cc950d52 to your computer and use it in GitHub Desktop.
Save svdamani/d5e9db72ca5993ff999e3f51cc950d52 to your computer and use it in GitHub Desktop.
Angular Http wrapper
import { Injectable } from '@angular/core';
import { Http, RequestOptionsArgs, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class RestService {
baseUrl: string; // base API url
token: string; // Initialize from login
constructor(private http: Http) {}
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
Object.assign(options.headers, { Authorization: this.token });
return this.http
.request(`${this.baseUrl}/${url}`, options)
.map(this.extractData.bind(this))
.catch(this.handleError.bind(this));
}
get(url: string, options?: RequestOptionsArgs): Observable<Response> {
Object.assign(options.headers, { Authorization: this.token });
return this.http
.get(`${this.baseUrl}/${url}`, options)
.map(this.extractData.bind(this))
.catch(this.handleError.bind(this));
}
post(url: string, body: any, options?: RequestOptionsArgs): Observable<Response> {
Object.assign(options.headers, { Authorization: this.token });
return this.http
.post(`${this.baseUrl}/${url}`, body, options)
.map(this.extractData.bind(this))
.catch(this.handleError.bind(this));
}
put(url: string, body: any, options?: RequestOptionsArgs): Observable<Response> {
Object.assign(options.headers, { Authorization: this.token });
return this.http
.put(`${this.baseUrl}/${url}`, body, options)
.map(this.extractData.bind(this))
.catch(this.handleError.bind(this));
}
delete(url: string, options?: RequestOptionsArgs): Observable<Response> {
Object.assign(options.headers, { Authorization: this.token });
return this.http
.delete(`${this.baseUrl}/${url}`, options)
.map(this.extractData.bind(this))
.catch(this.handleError.bind(this));
}
patch(url: string, body: any, options?: RequestOptionsArgs): Observable<Response> {
Object.assign(options.headers, { Authorization: this.token });
return this.http
.patch(`${this.baseUrl}/${url}`, body, options)
.map(this.extractData.bind(this))
.catch(this.handleError.bind(this));
}
head(url: string, options?: RequestOptionsArgs): Observable<Response> {
Object.assign(options.headers, { Authorization: this.token });
return this.http
.head(`${this.baseUrl}/${url}`, options)
.map(this.extractData.bind(this))
.catch(this.handleError.bind(this));
}
options(url: string, options?: RequestOptionsArgs): Observable<Response> {
Object.assign(options.headers, { Authorization: this.token });
return this.http
.options(`${this.baseUrl}/${url}`, options)
.map(this.extractData.bind(this))
.catch(this.handleError.bind(this));
}
private extractData(response: Response) {
// Some pre-processing or validation
return response.headers.get('Content-Type') === 'application/json'
? response.json()
: response.text();
}
private handleError(error: any) {
// console.log(error);
// alert(error);
// this.someMessageService.send(error);
// error tracking API
return Observable.throw(error);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment