Вы можете сделать post / get , используя библиотеку, которая позволяет использовать HttpClient со строго типизированными обратными вызовами .
Данные и ошибка доступны непосредственно через эти обратные вызовы.
Библиотека называется angular-extended-http-client .
угловая расширенная-http-клиентская библиотека на GitHub
библиотека angular-extended-http-client в NPM
Очень прост в использовании.
Традиционный подход
В традиционном подходе вы возвращаете Observable <<code>HttpResponse< T >
> из Service API. Это связано с HttpResponse.
При таком подходе вы должны использовать .subscribe (x => ...) в остальной части вашего кода.
Это создает жесткую связь между http layer и остальной частью вашего кода .
Строго типизированный метод обратного вызова
Вы имеете дело с вашими моделями только с помощью строго типизированных обратных вызовов.
Следовательно, остальная часть вашего кода знает только о ваших моделях.
Пример использования
Сильно типизированные обратные вызовы:
Успех
- IObservable <<code>T>
- IObservableHttpResponse
- IObservableHttpCustomResponse <<code>T>
Ошибка:
- IObservableError <<code>TError>
- IObservableHttpError
- IObservableHttpCustomError <<code>TError>
Добавить пакет в свой проект и в модуль приложения
import { HttpClientExtModule } from 'angular-extended-http-client';
и в импорте @NgModule
imports: [
.
.
.
HttpClientExtModule
],
Ваши модели
export class SearchModel {
code: string;
}
//Normal response returned by the API.
export class RacingResponse {
result: RacingItem[];
}
//Custom exception thrown by the API.
export class APIException {
className: string;
}
Ваш сервис
В вашей службе вы просто создаете параметры с этими типами обратного вызова.
Затем передайте их в метод get HttpClientExt .
import { Injectable, Inject } from '@angular/core'
import { SearchModel, RacingResponse, APIException } from '../models/models'
import { HttpClientExt, IObservable, IObservableError, ResponseType, ErrorType } from 'angular-extended-http-client';
.
.
@Injectable()
export class RacingService {
//Inject HttpClientExt component.
constructor(private client: HttpClientExt, @Inject(APP_CONFIG) private config: AppConfig) {
}
//Declare params of type IObservable<T> and IObservableError<TError>.
//These are the success and failure callbacks.
//The success callback will return the response objects returned by the underlying HttpClient call.
//The failure callback will return the error objects returned by the underlying HttpClient call.
searchRaceInfo(model: SearchModel, success: IObservable<RacingResponse>, failure?: IObservableError<APIException>) {
let url = this.config.apiEndpoint;
this.client.post<SearchModel, RacingResponse>(url, model,
ResponseType.IObservable, success,
ErrorType.IObservableError, failure);
}
}
Ваш компонент
В ваш Компонент добавляется ваша Служба и вызывается API searchRaceInfo , как показано ниже.
search() {
this.service.searchRaceInfo(this.searchModel, response => this.result = response.result,
error => this.errorMsg = error.className);
}
Оба, ответ и ошибка , возвращаемые в обратных вызовах, строго типизированы. Например. ответ имеет тип RacingResponse и ошибка равна APIException .