GitBookインターセプターによる介入この章では、HttpClientの重要な機能であるインターセプターについて解説します。インターセプターの基本インターセプターはHttpClientの内部で実行され、HttpClientの処理に割り込むための根幹的な機能です。リクエストやレスポンスの中身を検証、改変する目的に使われます。インターセプターはAngularのサービスクラスとして定義し、それをDI機構を利用してインターセプターとして登録してHttpClientに存在を知らせます。何も行わない空のインターセプターです。メソッドを実装する必要があります。パラメータの2つを受け取ります。トークンに紐づけるproviderを宣言することで、HttpClientに対してインターセプターを登録できます。後述しますが、複数のインターセプターを登録する際にはprovideの順番によって実行順が決定します。そのため、providerの宣言は1つのファイルに集約することで安全に管理できます。{}リクエストへの介入リクエストに介入する方法はシンプルです。メソッドに渡すだけです。ヘッダーを追加するインターセプターです。オブジェクトはイミュータブルなので、ヘッダーやURLなどのデータを直接書き換えることはできません。オブジェクトを作成します。メソッドを呼び出します。これがリクエストに介入する基本的なインターセプターの実装方法です。インターセプターの実装は単なるAngularのサービスであるため、通常のサービスと同じようにDIを使って別のサービスを呼び出せます。レスポンスへの介入レスポンスに介入するインターセプターを実装するためには、基本的なObservableへの理解が必要です。メソッドでオペレーターを追加します。メソッドの戻り値になります。次の例は、レスポンスをログに記録するインターセプターです。オペレーターによってレスポンスの流れを傍受し、ログ送信処理をおこなっています。基本的なObservable操作を習得すれば、さまざまな介入処理をRxJSのビルトインオペレーターを活用して実装できます。}}もちろんリクエストとレスポンスの両方に介入するインターセプターも実装できます。次の例は、独自のキャッシュ機構を導入するインターセプターです。URLごとにレスポンスを保持し、すでにレスポンスを持っている場合はHTTP通信をスキップしてキャッシュから返却します。順番に呼び出されます。パラメータはCを表します。Aの順番で介入できます。Cが返したObservableです。上記のルールに従い、よりリクエストについて優先度の高いインターセプターは最後にprovideし、レスポンスについて優先度の高いインターセプターは最初にprovideすることが推奨されます。もつ固有のサービスクラスです。いうクラスが割り当てられます。利用した際には、代わりにJSONPを処理するクラスが割り当てられます。XHRあるいはJSONPを使って実際のHTTP通信をおこなう処理も、インターセプター機構の上に実装されているということです。使わず独自に作成したObservableを返却すれば、HTTP通信をスキップして擬似的なレスポンスを返すことができます。うまく利用すれば、HttpClientの根幹的な挙動すらもカスタマイズできるのです。