在 angular 应用程序中组织 http 服务的正确方法是什么?

What is the proper way of organizing http services in an angular app?

当我想从后端获取数据时,我在与我的组件分开的服务中使用 http 客户端。因此,为了在组件中获取数据(例如演员列表),我注入了我的“工厂”并订阅了它返回的可观察对象。它工作正常。

@Injectable()
export class Factory{

    constructor(private httpClient : HttpClient){}

    getActors(): Observable<Actor[]>{
        return this.httpClient.get<Actor[]>('api/actor');
    }
}

但是当我在需要演员列表的同一个组件中需要其他数据(例如电影列表)时,我只需在同一个工厂服务中声明另一个方法。从同一服务的不同方法返回的数据在数据库中可能彼此相关,也可能不相关。对我来说,将所有内容都放在一个服务中以便在项目的一个大的独立部分(一个模块)中使用会更容易。

@Injectable()
export class Factory{

    constructor(private httpClient : HttpClient){}

    getActors(): Observable<Actor[]>{
        return this.httpClient.get<Actor[]>('api/actor');
    }

    getMovies(): Observable<Movie[]>{
        return this.httpClient.get<Movie[]>('api/movie');
    }
}

现在,我经常需要在项目的不同部分(不同模块)接收相同的数据(电影列表)。所以我在另一部分创建了一个新的工厂服务。我在其中声明了一个与第一个服务中的方法相同的方法。

我觉得这样不太好。例如,如果 API 发生变化,我将不得不在项目的两个不同部分进行更改。这违背了DRY原则。

我看到的另一种方法是为项目中的每个实体创建单独的服务。但随后我将不得不在我的组件的构造函数中注入尽可能多的服务,因为它需要多少实体。

在 angular 应用程序中组织 http 服务的正确方法是什么?

这是一个很好的问题,但经常被忽视,当您的应用程序开始扩展时,这可能会再次成为令人头疼的问题。这个问题会得到很多自以为是的答案,所以请对我的建议持保留态度。

这是一条很好的路线,您应该何时进入服务并取决于它执行的逻辑和程度。它将伴随经验和与其他项目的合作。

我认为将大部分(如果不是全部)http 调用连接到单个文件是个好主意,因为正如您所说,许多组件(通过服务)很可能会共享这些 http 调用。您还可以在那里将环境​​变量配置为 url 的使用。我将 GeneralRequestService 作为最后一层。然后所有服务都可以访问它。否则循环依赖注入错误很快就会出现。