я пишу простое приложение на угловом языке и создал несколько сервисов, которые вызывают API.
До изменений в каждом сервисе у меня были такие методы:
let addHeaders = new HttpHeaders();
addHeaders = addHeaders.append('Authorization', apiKey);
const endpoint = this.BuildAddress(this.MessagesEndp);
return this.httpClient.post<Array<MessageDto>>(endpoint, dto, {headers: addHeaders});
, но кодирование с DRYПравило Я хочу создать некоторые общие методы для всех моих служб, которые являются производными от моего restApiSetvice.
Итак, я начал писать так:
Get<T>(endpoint: string, authorization: boolean = true): Observable<T> {
const apiKey = this.GetApiKey();
if (authorization) {
const addHeaders = new HttpHeaders().set('Authorization', apiKey);
return this.client.get<T>(endpoint, {headers: addHeaders}).pipe(map(result => {
return result;
}));
} else {
return this.client.get<T>(endpoint).pipe(map(result => {
return result;
}));
}
}
, чтобы я мог упростить свой кодво всех службах к этому:
GetFriendshipRequests(id: number) {
const endpoint = this.BuildAddress(this.GetFriendshipisRequestsEnd, id);
return this.Get<Array<number>>(endpoint);
}
, но есть некоторые проблемы, для некоторых вызовов не требуется авторизация, поэтому в моем примере есть оператор if
if (authorization) {
, но некоторые изслужбы должны также отправить это:
responseType: 'text' as 'json'
по запросу
, а также некоторые из них должны отправить это:
observe: 'response'});
(на самом деле это маленькая проблема, потому чтоя всегда могу наблюдать все запросы)
но как я могу написать параметры метода для извлечения наблюдения, параметров, типа ответа и т. д.?
как это сделать гладко
пожалуйста, незабыть, что я на самом деле изучаю типыугловатые и угловатые, поэтому, пожалуйста, напишите ответ настолько просто, насколько вы можете:)
что я хочу:
Я просто не хочу помещать множественное выражение if в мой общий класс restapiQuery