RestTemplate、WebClient 和 RestClient

xtyuns發表於2024-05-31

WebClient

WebClient 是 Spring Framework 5.0 中引入的響應式 HTTP 客戶端,它提供了一種非阻塞、反應式的方法來處理 I/O,這可以在高流量應用程式中實現更好的可擴充套件性和更高的效能。

RestClient

RestClient 是 Spring Framework 6.1 中引入的同步版 HTTP 客戶端 (因為隨著 Project Loom 的出現,可以透過標準的同步 API 來實現非同步,所以 Spring 提供了一個同步版的 HTTP 客戶端)
相關 issue: Introduce RestClient

RestTemplate

RestTemplate 是一個 Spring 早期版本中基於模板方法模式設計的 HTTP 客戶端,Spring 官方認為 RestTemplate 中包含了太多的過載方法,是一個不合理的設計,因此又重新設計了基於 fluent API 的 WebClient 和 RestClient。

關於 RestTemplate 的說明:https://github.com/spring-projects/spring-framework/issues/29552#issuecomment-1625324466

基於 HttpClient 的 Operations / Template 設計是我們 14 年前在 RestTemplate 中建立的,並且很快就發現 Templates 提供的 API 樣式不適合 HTTP 客戶端,因為在模板中公開 HTTP 的每個功能會導致太多過載。

總結

  1. 相較於 RestTemplate 的模板方法模式,WebClient 和 RestClient 使用了更現代的 Functional-style, fluent API
  2. WebClient 是一個響應式的非同步 HTTP 客戶端,RestClient 是一個同步版本的 HTTP 客戶端

所以應在向更現代的 HTTP 客戶端:RestClient 和 WebClient 遷移

More

宣告式 HTTP 客戶端:HttpExchange (透過 HttpServiceProxyFactory 實現)

相關文章