2017-08-27 37 views
4

我没有在documentation中找到如何扩展HttpClient或如何为我的一些HTTP请求指定不同的拦截器。在文档中,他们解释了如何在HTTP_INTERCEPTORS中设置拦截器,但是每个HTTP请求都被拦截。Angular 4.3&5:如何扩展HttpClient?

我需要定制HttpClient实现来设置特定的头,端点或响应拦截器(我不想使用Restangular,我宁愿使用内置的角度HttpClient实现)。

  • 我有一个oAuth API与特定的端点和特定的标头来设置我的API密钥。
  • 我也有我的“资源”API需要特定的标头(Authorization: Bearer ...和API-KEY)和特定的响应拦截器来捕获所有HTTP 401响应。
  • 也许,我需要调用一些的外部API没有任何拦截

我知道这是可能的,但Restangular我更喜欢使用HttpClient。这怎么可能 ?

我发现this article但是,这是为Http而不是为新的HttpClient执行角度4.3。

回答

1

不是扩展HttpClient的,我会采取三种方法之一:

  1. 有每个拦截器检查请求的URL,而无论是做的工作,或者就叫next.handle(req)没有做别的事情,根据URL

  • 写委派拦截,以决定其他拦截委托给,其取决于根据您的要求。
  • 只要写一个大的拦截器,决定做基于URL /无论你需要什么。
  • 我的直觉是去与#1

    +0

    谢谢你的评论。我认为这种方法不尊重关注的分离(除了第一个?!)。但是如果我使用拦截器来设置API端点,我将无法检查URL?! – eroak

    +0

    我并不是建议在拦截器中设置端点,只需设置特定端点所需的任何标题即可。我认为你的服务应该负责了解端点url。 – GreyBeardedGeek

    +0

    我的每个自定义'HttpClient'实现都有自己的常量URL端点,我不想使用'getURLEndpoint()'类似的方法。 – eroak