用REST API:spring-addons結(jié)合OpenAPI生成@HttpExchange代理完整教程)
零樣板代碼調(diào)用REST APIspring-addons結(jié)合OpenAPI生成HttpExchange代理完整教程【免費(fèi)下載鏈接】spring-addonsAdditional Spring Boot auto-configuration for OAuth2 / OpenID REST項(xiàng)目地址: https://gitcode.com/gh_mirrors/sp/spring-addons在 Spring 項(xiàng)目中調(diào)用第三方 REST API你是不是還在手寫(xiě)RestTemplate、拼接 URL、管理認(rèn)證信息spring-addons作為一套為 OAuth2 / OpenID 與 REST 場(chǎng)景量身打造的 Spring Boot 自動(dòng)配置擴(kuò)展配合 OpenAPI 規(guī)范與HttpExchange代理能讓你以近乎零樣板代碼的方式消費(fèi)任何 REST API先自動(dòng)生成接口再用一行配置注入客戶端。本文面向新手帶你完整走通這條高效開(kāi)發(fā)路徑。什么是 spring-addons為什么它能實(shí)現(xiàn)零樣板調(diào)用 REST APIspring-addons 提供了多個(gè)開(kāi)箱即用的 Starter其中與本教程最相關(guān)的是spring-addons-starter-rest。它的職責(zé)非常簡(jiǎn)單用application.yml配置代替手寫(xiě)代碼自動(dòng)創(chuàng)建并注入RestClient/WebClient客戶端 Bean。你不再需要關(guān)心請(qǐng)求的授權(quán)方式Bearer Token、Basic、靜態(tài) API Key基礎(chǔ)路徑與部署環(huán)境切換HTTP 代理、連接超時(shí)、讀取超時(shí)SSL 證書(shū)校驗(yàn)策略底層ClientHttpRequestFactory的選擇而HttpExchange是 Spring 6 引入的聲明式 HTTP 接口只需定義接口方法運(yùn)行時(shí)由框架自動(dòng)生成實(shí)現(xiàn)。兩者結(jié)合調(diào)用 REST API 的代碼量被壓縮到極致。三步走從 OpenAPI 規(guī)范到可調(diào)用的 REST 客戶端要真正實(shí)現(xiàn)零樣板最優(yōu)雅的鏈路是這樣的用springdoc-openapi從服務(wù)端RestController源碼生成 OpenAPI 規(guī)范openapi.json用openapi-generator-maven-plugin從規(guī)范自動(dòng)生成HttpExchange客戶端接口用spring-addons-starter-rest自動(dòng)配置RestClient/WebClient并通過(guò)HttpExchangeProxyFactoryBean生成接口實(shí)現(xiàn)并注冊(cè)為 Bean官方文檔spring-addons-starter-rest/README.md第一步用 springdoc-openapi 生成 OpenAPI 規(guī)范服務(wù)端只需引入 springdoc 依賴啟動(dòng)應(yīng)用后即可訪問(wèn)/v3/api-docs獲得標(biāo)準(zhǔn) OpenAPI 規(guī)范。也可以借助springdoc-openapi-maven-plugin在構(gòu)建階段自動(dòng)生成并保存為文件例如samples/springdoc-openapi-2494-servlet/pom.xml中配置的輸出目錄就是項(xiàng)目根目錄最終產(chǎn)物見(jiàn) openapi.json。第二步用 openapi-generator 生成 HttpExchange 接口拿到規(guī)范后在客戶端工程里配置openapi-generator-maven-plugin項(xiàng)目根 pom.xml 已托管了該插件版本選擇適合 Spring 6 的生成器即可輸出如下風(fēng)格的接口HttpExchange(accept MediaType.APPLICATION_JSON_VALUE) public interface GreetApi { GetExchange(url /greet) String getGreeting(); }對(duì)應(yīng)真實(shí)示例見(jiàn) GreetApi.java。這一步把調(diào)用什么接口、傳什么參數(shù)變成了純聲明。第三步用 spring-addons 自動(dòng)配置 REST 客戶端生成接口后只需在配置文件中聲明客戶端com: c4-soft: springaddons: rest: client: greet-client: base-url: ${greet-base-uri}spring-addons 會(huì)自動(dòng)創(chuàng)建一個(gè)名為greetClient的RestClientBean然后在一個(gè)配置類里把它與接口綁定Bean GreetApi greetApi(RestClient greetClient) throws Exception { return new RestClientHttpExchangeProxyFactoryBean(GreetApi.class, greetClient).getObject(); }核心工廠類源碼位于 HttpExchangeProxyFactoryBean.javaServlet 與 Reactive 場(chǎng)景分別由 RestClientHttpExchangeProxyFactoryBean.java 和 WebClientHttpExchangeProxyFactoryBean.java 支持。此后在業(yè)務(wù)代碼里直接注入GreetApi調(diào)用即可。如何用一條配置搞定 OAuth2 認(rèn)證與網(wǎng)絡(luò)細(xì)節(jié)OAuth2 Bearer 自動(dòng)附加最省心的認(rèn)證方式如果被調(diào)用的 API 受 OAuth2 保護(hù)spring-addons 支持兩種 Bearer 注入方式forward-bearer直接把當(dāng)前安全上下文中的訪問(wèn)令牌轉(zhuǎn)發(fā)給下游 API適合資源服務(wù)器間的調(diào)用oauth2-registration-id使用 OAuth2 客戶端注冊(cè)信息通過(guò) client-credentials 等流程獲取新令牌com: c4-soft: springaddons: rest: client: greet-client: base-url: ${greet-base-uri} authorization: oauth2: forward-bearer: true代理、超時(shí)與 SSL 配置告別手寫(xiě) HTTP 客戶端除了認(rèn)證網(wǎng)絡(luò)層的繁瑣細(xì)節(jié)也全部收斂到配置中connect-timeout-millis與read-timeout-millis控制超時(shí)proxy支持從HTTP_PROXY/NO_PROXY環(huán)境變量自動(dòng)讀取也可顯式覆蓋ssl-certificates-validation-enabled: false可關(guān)閉證書(shū)校驗(yàn)client-http-request-factory-impl可在 JDK、HttpComponents、Jetty 之間切換實(shí)現(xiàn)。完整示例從 Thymeleaf 頁(yè)面調(diào)用受保護(hù)的 REST APIsamples/tutorials/resource-server_with_ui是一個(gè)把 OAuth2 客戶端與資源服務(wù)器配置混合在單個(gè)應(yīng)用中的完整示例瀏覽器通過(guò)會(huì)話登錄Thymeleaf 控制器內(nèi)部用配置好的RestClient攜帶令牌調(diào)用自家 REST API。其客戶端配置見(jiàn) RestClientsConfig.java頁(yè)面效果如下讓生成的 OpenAPI 規(guī)范更準(zhǔn)確spring-addons-starter-openapiOpenAPI 規(guī)范的質(zhì)量直接決定生成的HttpExchange接口是否可靠。當(dāng)枚舉類型通過(guò)toString()、JsonValue或自定義Converter序列化時(shí)springdoc 默認(rèn)生成的規(guī)范常常與實(shí)際行為不符。spring-addons-starter-openapi會(huì)掃描類路徑、挑選正確的 Spring 序列化 Bean并注冊(cè)自定義ModelConverter讓規(guī)范中的枚舉取值與真實(shí)序列化結(jié)果保持一致詳見(jiàn) spring-addons-starter-openapi/README.MD??偨Y(jié)把精力留給業(yè)務(wù)回顧整個(gè)方案OpenAPI 規(guī)范自動(dòng)生成HttpExchange接口spring-addons-starter-rest 用配置完成認(rèn)證與網(wǎng)絡(luò)細(xì)節(jié)工廠類把接口與客戶端裝配成 Bean——調(diào)用 REST API 的樣板代碼幾乎被清零。與其反復(fù)封裝RestTemplate不如用這套聲明式方案讓每個(gè) REST API 都像本地方法一樣被調(diào)用。更多官方文檔spring-addons-starter-rest/README.md、spring-addons-starter-openapi/README.MD?!久赓M(fèi)下載鏈接】spring-addonsAdditional Spring Boot auto-configuration for OAuth2 / OpenID REST項(xiàng)目地址: https://gitcode.com/gh_mirrors/sp/spring-addons創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考