Угловой http-сервис, использующий перечисления для динамических конечных точек

#angular #enums

Вопрос:

Поэтому я пытаюсь создать угловое приложение, используя лучшие практики, чтобы сделать его как можно более профессиональным. На данный момент я разделил приложение на различные модули, основной, общий и функциональный модуль. В моем основном модуле у меня есть моя конфигурация, модели и службы. Обычно, когда я создаю приложение, я создаю сервис для каждой модели и использую его во всех своих компонентах.

Но кто-то сказал мне, что лучше создать единую службу HTTP, отвечающую за все HTTP-вызовы. Что я и сделал, теперь этот человек использует перечисления для определения различных конечных точек API, что, я думаю, нормально при использовании статических конечных точек, но в моем случае у меня есть динамические маршруты, такие как «/Компании/{id}» или «/Компании/{id}/здания/{fk}» Можно ли использовать перечисления для чего-то подобного, или есть лучший способ сделать это?

Это метод для создания HTTP-вызовов:

 /**
   * This function is used to make API calls, you will only have to call this function,
   * pass a method name, API URL, and some data if you want to do put or post calls,
   * and process its response, any changes to the HTTP service will have to be applied here
   * @param API path of the API
   * @param method name of the API method
   * @param data any required data for put or post calls
   * @returns data or error response of the API call
   */
  requestCall(api: EndPoints, method: ApiMethod, data?: any) {
    let response;
    switch (method) {
      case ApiMethod.GET:
        response = this.http.get(`${environment.apiUrl}${api}`)
          .pipe(catchError((err) => this.handleError(err, this)));
        break;
      case ApiMethod.POST:
        response = this.http.post(`${environment.apiUrl}${api}`, data)
          .pipe(catchError((err) => this.handleError(err, this)));
        break;
      case ApiMethod.PUT:
        response = this.http.put(`${environment.apiUrl}${api}`, data)
          .pipe(catchError((err) => this.handleError(err, this)));
        break;
      case ApiMethod.DELETE:
        response = this.http.get(`${environment.apiUrl}${api}`)
          .pipe(catchError((err) => this.handleError(err, this)));
        break;
      default:
        break;
    }
    return response;
  }
 

Это мое перечисление (просто пример):

 export type EndPoints = AuthEndPoints | BuildingEndPoints | RoomEndPoints | DeviceEndPoints;

export enum AuthEndPoints {
    CHECK_SERVER = "/checkserver/",
    LOGIN = "/auth/token/login/",
    CURRENT_USER = "/auth/users/me/",
    LOGOUT_USER = "/auth/token/logout/",
    REGISTER = "/auth/users/",
    // FORGOT_PASSWORD,
    // RESET_PASSWORD,
    // INVITE_MEMBER,
}

export enum BuildingEndPoints {
    ALL_BUILDINGS = "/Buildings/",
    BUILDING = "/Buildings/${id}"
}
 

заранее спасибо!