2017-08-27 73 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