首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何管理角7中的API函数调用服务

如何管理角7中的API函数调用服务
EN

Stack Overflow用户
提问于 2019-12-09 18:44:21
回答 1查看 655关注 0票数 1

我完成了一个棱角7网络应用程序(大致)。例如,我有一个documents.service.ts文件,它包括下面的HTTP请求函数:

代码语言:javascript
复制
public sendOnlyCoverPage(strProNo: string, strEstesFileName: string): Observable<any> {
    return this._http.get(this.FilesApi + "/GetSendOnlyCoverPage?strProNo=" + strProNo + '&strEstesFileName=' + strEstesFileName, httpOptions);
}

邮寄请求的格式如下:

代码语言:javascript
复制
public FTP_PutFile(ftpModel: any): Observable<any> {
    var obj = JSON.stringify(ftpModel);
    return this._http.post(this.FilesApi + "/PostFTP_PutFile", obj, httpOptions);
}

我有两个问题:

问题1:

我在不同的服务中有很多HTTP和POST函数,如上面所示。我觉得我在API函数设计上做错了什么,因为当我打开任何序列化文件时,有很多类似于上面的函数。我认为有任何方法来集中这些api函数。例如,我可以创建一个中间服务,每当我需要进行API调用时,我可以传递函数名、url和参数等。

问题2:

正如上面的代码所示,我有参数ftpModel: any。我知道最好创建一个对象映射(接口)来替换任何类型。但同样,也有很多类似的参数。是否有任何解决方案,而不是为每个参数创建每个对象映射(接口)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-09 19:07:42

问题1您应该创建一个抽象的BaseService,如下所示:

代码语言:javascript
复制
import {HttpClient} from '@angular/common/http';
import {Observable} from 'rxjs';
import {environment} from '../../environments/environment';

export abstract class BaseService<T> {
  private endpoint: string;

  constructor(protected http: HttpClient,
              endpoint: string) {
    this.endpoint = endpoint;
  }

  findAll(): Observable<T[]> {
    return this.http.get<T[]>(this.getUrl());
  }

  findOne(id: number): Observable<T> {
    return this.http.get<T>(`${this.getUrl()}/${id}`);
  }

  save(objeto: T): Observable<T> {
    return this.http.post<T>(this.getUrl(), objeto);
  }

  delete(id: number): Observable<void> {
    return this.http.delete<void>(`${this.getUrl()}/${id}`);
  }

  protected getUrl(): string {
    return `${environment.api_url}${this.endpoint}`;
  }

  complete(query: string): Observable<T[]> {
    return this.http.get<T[]>(`${this.getUrl()}/complete?query=${query}`);
  }

}

同时,在您的服务中扩展它:

代码语言:javascript
复制
export class ProductService extends BaseService<Product> {

  constructor(protected http: HttpClient) {
    super(http, 'product');
  }
}

我的集散地中的一个例子

问题2更好的方法仍然是您提到的,创建用于映射的类/接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59254862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档