-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
TypeScriptClientGenerator Angular
Rico Suter edited this page Jun 6, 2019
·
2 revisions
Sample
- Client class name: DataClient
- TypeScript file name: serviceClients.ts
Additional settings
Angular template only:
- BaseUrlTokenName
- HttpClass: Http | HttpClient
- RxJsVersion: (use 6.0 for Angular 6+)
- UseSingletonProvider: (Angular 6+ only)
- InjectionTokenType
First create an NgModule with the generated services:
import { NgModule } from '@angular/core';
import { HttpModule } from '@angular/http';
import { SampleDataService } from './services';
@NgModule({
imports: [
HttpModule
],
providers: [
SampleDataService
]
})
export class ServicesModule {
}
Usage in an Angular component via dependency injection:
import { Component } from '@angular/core';
import { SampleDataService, WeatherForecast } from '../../services';
@Component({
selector: 'fetchdata',
templateUrl: './fetchdata.component.html'
})
export class FetchDataComponent {
public forecasts: WeatherForecast[];
constructor(sampleDataService: SampleDataService) {
sampleDataService.weatherForecasts().subscribe(result => {
this.forecasts = result;
});
}
}
Extension code which is needed when UseTransformOptionsMethod
or UseTransformResultMethod
is enabled is shown below.
HttpClass: Http
import { Observable } from 'rxjs/Observable'; // ignore
import { Response, RequestOptionsArgs } from '@angular/http'; // ignore
export class MyBaseClass {
protected transformOptions(options: RequestOptionsArgs) {
return Promise.resolve(options);
}
protected transformResult(url: string, response: Response, processor: (response: Response) => any): Observable<any> {
return processor(response);
}
}
HttpClass: HttpClient
export class ServiceBase {
protected transformOptions(options: any) {
return Promise.resolve(options);
}
protected transformResult(url: string, response: HttpResponse<Blob>, processor: (response: HttpResponse<Blob>) => any): Observable<any> {
return processor(response);
}
}
Following example of interceptor extends generated HTTP clients adding JWT token to all generated HTTP calls.
Client should be generated with HttpClient option (Library @angular/common/http)
Interceptor example below:
import { Injectable } from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor
} from '@angular/common/http';
import { OidcSecurityService } from 'angular-auth-oidc-client';
import { Observable } from 'rxjs';
@Injectable()
export class TokenInterceptor {
/**
* Creates an instance of TokenInterceptor.
* @param {OidcSecurityService} auth
* @memberof TokenInterceptor
*/
constructor(public auth: OidcSecurityService) {}
/**
* Intercept all HTTP request to add JWT token to Headers
* @param {HttpRequest<any>} request
* @param {HttpHandler} next
* @returns {Observable<HttpEvent<any>>}
* @memberof TokenInterceptor
*/
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${this.auth.getToken()}`
}
});
return next.handle(request);
}
}
Update providers sections in app.module
like:
providers: [
HttpClientModule,
{ provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true }
],