LoginSignup
0
1

More than 1 year has passed since last update.

【Java】RestTemplate・WebClient・MockMvc 比較メモ

Last updated at Posted at 2022-04-09

まえがき

APIからAPIをコールする場合や、テストプログラム内からAPIをコールしたい場合に「何使えばいいの?」というところで以下の3つが挙げられる。

RestTemplate(org.springframework.web.client.RestTemplate)
WebClient(org.springframework.web.reactive.function.client.WebClient)
MockMvc(org.springframework.test.web.servlet.MockMvc)

いずれもSpringFrameworkで提供されているやつだが、どういう時にどれを使えばいいのかちゃんと理解できていなかったので、この記事でまとめていく。

比較表

特徴
RestTemplate ・Spring提供のAPIクライアントライブラリ
APIレスポンスが返ってくるまでスレッドは待機状態となる
WebClient Spring WebFlux提供のAPIクライアントライブラリ
APIレスポンスを待機せずスレッドは処理を進める
MockMvc テスト時のAPIコール用(パッケージ名に"test"が含まれているくらいだし)

Spring WebFluxって何?

リアクティブプログラミングによってノンブロッキングで非同期なアプリケーションを開発できるSpring Framework

リアクティブプログラミング って何?

データストリームと変更の伝播に関係する宣言型プログラミングパラダイム

「データストリームと変更の伝播」が一体何を指しているのか、下記の記事が分かりやすかったのでおすすめ。

ノンブロッキングで非同期なアプリケーション って何?

・ノンブロッキングとは「スレッドをブロックしない(待機状態としない)」ことを指す。

・Tomcatは1リクエストを処理するのに1スレッドを割り当てるのだが、このリクエスト内で取得に時間のかかる外部APIをコールする処理がある場合に、この外部APIのレスポンスが返ってくるまでスレッドは待機状態となる。これが"スレッド"がブロッキングされている状態である。Spring MVC(RestTemplate)ではブロッキングされるが、Spring WebFlux(WebClient)ではノンブロッキングを実現できる

・「外部APIのレスポンスを待たずに後続処理を続けられる」ことから、非同期なアプリケーションと呼ばれる。

ブロッキングとノンブロッキングの違い

実際にRestTemplate(ブロッキング)とWebClient(ノンブロッキング)で動作検証しているサイトで、わかりやすいサイトがあったので掲載させていただく。

RestTemplate

下記参照。

WebClient

下記参照。

MockMvc

下記参照。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1