APIを叩く前後に共通処理を入れる、リクエスト/レスポンスを変更する

Httpリクエストをするためのクラス  RestTemplate  には、専用のinterceptorである、ClientHttpRequestInterceptorを仕込むことができます。

このinterceptorは、リクエストに対し、定義した共通処理を実装できます。

今回はRestTemplate専用のinterceptorである、ClientHttpRequestInterceptor の使い方を解説します。

サンプルコードはgithubに上がっております。

1.ClientHttpRequestInterceptorを継承したクラスを作成する。

 

まず、ClientHttpRequestInterceptor を継承したクラスを作成します。

 

 

例の ApiRequestInterceptorでは、

Httpリクエストを実行

HttpレスポンスのステータスコードがUNAUTHORIZEDの場合、

リクエストのAuthozationヘッダーの値を修正し(今回は1234という値に修正)、

再度リクエストを実行する

という動きを実現しております。このinterceptorクラスを用いたHttpリクエストは全て、この手順で実行されます。

続いては、interceptorを使ってHttpリクエストを投げてます。

2. Interceptorを使ってHttpリクエストを投げてみる

 

作成したInterceptorをRestTemplateに追加し、そのRestTemplateを使って外部APIにアクセスしましょう。

サンプルでは、APIのパラメータに与えられた値をAuthorizationヘッダーの値にし、認証用のAPIを叩くAPIを実装しました。

 

外部APIとしてリクエストする /v1/auth APIも同コントローラーに追加しましょう。

 

 

このAPIは、送られてきたAuthorizationヘッダーの値が1234でなければ、認証失敗として、UNAUTHORIZED レスポンスを返します。

 

では、実際にAPIを叩いて挙動を確認してみましょう。

3. Interceptorの挙動を確認する。

 

サンプルコードを例に、API を実行します。

 

 

/v1/interceptor API経由で/v1/authを叩きます。
Authorizationヘッダーの値が1234なので、http://localhost:8888/v1/auth は  ok(200) とレスポンスを返します。

 

 

アプリケーションのログには、標準の出力以外は出力されていません。

 

 

続いて、以下 を実行します。

 

 

 

レスポンスは 、文字列で ok(HttpStatus:200) と、先ほどと同じレスポンスを返しています。

 

アプリケーションログを見てみます。

 

アプリケーションのログには、1度目のリクエストで認証に失敗し(UNUAUTHORIZEDが返却され)、再度ヘッダーを修正してリクエストをした際の出力が表示されております。

これは先ほどの ApiRequestInterceptor クラスで実装した処理になります。

Interceptorに実装した処理が実行され、リクエストを修正し投げ直すことに成功しております。

 

 

このようにして、ClientHttpRequestInterceptor を使って、APIリクエスト時の共通処理を一箇所に簡潔に記述することができます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です