So, I am following angular 2 guides on their website via typescript and am stuck at http api integration. I'm trying to make a simple application that can search via soundcloud api for a song, however I have difficulties implementing and understanding how to get going and online resources do it in so many different ways (I believe do to rapid angular 2 syntax changes back in the day).
So at the moment my project looks like this
app components home home.component.ts ... search search.component.ts ... app.ts ... services soundcloud.ts bootstrap.ts index.html
Nothing fancy going on in the example, main files would be
app.ts
import {Component, View} from 'angular2/core'; import {RouteConfig, ROUTER_DIRECTIVES} from 'angular2/router'; import {HomeComponent} from './home/home.component'; import {SearchComponent} from './search/search.component'; @Component({ selector: 'app', templateUrl: 'app/components/app.html', directives: [ROUTER_DIRECTIVES] }) @RouteConfig([ {path: '/home', name: 'Home', component: HomeComponent, useAsDefault: true}, {path: '/search', name: 'Search', component: SearchComponent} ]) export class App { }
bootstrap.ts
import {App} from './components/app'; import {bootstrap} from 'angular2/platform/browser'; import {ROUTER_PROVIDERS} from 'angular2/router'; bootstrap(App, [ ROUTER_PROVIDERS ]);
And I was trying to figure out soundcloud.ts however am not able to and there are errors in following approach i.e. @Inject
is not found (I assume I am using outdated syntax here). Essentially I would like to use soundcloud service for api calls within my app form search component.
import {Injectable} from 'angular2/core' import {Http} from 'angular2/http' @Injectable() export class SoundcloudService { http : Http constructor(@Inject(Http) http) { this.http = http; } }
soundcloud api not included here as I can't get basics down first.
1.1 The Angular HTTP ClientThe API is asynchronous. JavaScript is single-threaded. Doing a blocking synchronous HTTP call will otherwise freeze the UI. It supports making HTTP requests (GET, POST, etc.), working with request and response headers, asynchronous programming.
The HttpClient is used to perform HTTP requests and it imported form @angular/common/http. The HttpClient is more modern and easy to use the alternative of HTTP. HttpClient is an improved replacement for Http. They expect to deprecate Http in Angular 5 and remove it in a later version.
Angular provides a client HTTP API for Angular applications, the HttpClient service class in @angular/common/http . The HTTP client service offers the following major features.
Well good answer provided by @langley but I would like to add some more points so posting as an answer.
First of all for consuming Rest APIs we need the Http
and HTTP_PROVIDERS
modules to be imported. As we are talking about Http the very first step is obviously.
<script src="node_modules/angular2/bundles/http.dev.js"></script>
But yes it is a good practice to provide
HTTP_PROVIDERS
in the bootstrap file because by using this way it is provided on a global level and is available to the whole project like this.
bootstrap(App, [ HTTP_PROVIDERS, some_more_dependencies ]);
and the imports to be included are....
import {Http, Response, RequestOptions, Headers, Request, RequestMethod} from 'angular2/http';
Sometimes we need to provide Headers
while consuming API's for sending access_token
and many more things which is done this way:
this.headers = new Headers(); this.headers.append("Content-Type", 'application/json'); this.headers.append("Authorization", 'Bearer ' + localStorage.getItem('id_token'))
Now to RequestMethods: bascially we use GET, POST but there are some more options you can refer here...
We can use requestmethods as RequestMethod.method_name
There are some more options for the APIs but for now I have posted one example for POST request which will help you by using some important methods:
PostRequest(url,data) { this.headers = new Headers(); this.headers.append("Content-Type", 'application/json'); this.headers.append("Authorization", 'Bearer ' + localStorage.getItem('id_token')) this.requestoptions = new RequestOptions({ method: RequestMethod.Post, url: url, headers: this.headers, body: JSON.stringify(data) }) return this.http.request(new Request(this.requestoptions)) .map((res: Response) => { if (res) { return [{ status: res.status, json: res.json() }] } }); }
you can refer here too for more info.
see also -
import has been changed from
import {Http, Response, RequestOptions, Headers, Request, RequestMethod} from 'angular2/http';
to
import {Http, Response, RequestOptions, Headers, Request, RequestMethod} from '@angular/http';
You need to add this line:
<script src="node_modules/angular2/bundles/http.dev.js"></script>
in your index.html file.
You need to add HTTP_PROVIDERS
:
bootstrap(App, [ ROUTER_PROVIDERS, HTTP_PROVIDERS ]);
in your boot.ts/bootstrap.ts file, and import them of course.
You need to import @Inject
in your DojoService
class file:
import {Injectable, Inject} from 'angular2/core'
Just like you imported @Injectable
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With