成 Java 代碼?這個框架讓你一鍵粘貼直接用)
從瀏覽器 DevTools 或 Postman 復(fù)制的 curl 命令原封不動粘貼進代碼就能跑。零翻譯、零拆解、零手工拼裝效率提升 5-8 倍。一、你的日常是不是這樣的場景 1從瀏覽器 DevTools 復(fù)制 curl你在瀏覽器里調(diào)試一個接口F12 打開 Network右鍵 - Copy as cURL拿到了一段完整的 curl 命令。然后呢你盯著這段命令開始手工翻譯curl https://api.example.com/users \-H Content-Type: application/json \-H Authorization: Bearer eyJhbGc... \--data-raw {name:John,page:1}翻譯成 Java 代碼變成這樣RestTemplate restTemplate new RestTemplate(); HttpHeaders headers new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.set(Authorization, Bearer eyJhbGc...); String body {\name\:\John\,\page\:1}; HttpEntityString entity new HttpEntity(body, headers); ResponseEntityString response restTemplate.exchange( https://api.example.com/users, HttpMethod.POST, entity, String.class );// 還要手動解析 response...一個接口三五分鐘十個接口一下午。改個參數(shù)還得重來。場景 2從 Postman 導(dǎo)出 curlPostman 里調(diào)通了接口點 Code - cURL復(fù)制出來。然后還是一樣的流程人肉拆解 URL、headers、body拼成 Java 代碼。你有沒有想過curl 命令已經(jīng)是完整的請求描述了為什么還要翻譯一遍二、JQuickCurl粘貼即用零翻譯JQuickCurl 做的事情很簡單直接把 curl 命令當(dāng)作 API 定義。瀏覽器復(fù)制的 curl原封不動貼進注解里就能跑。public interface ApiService { // 從瀏覽器復(fù)制的 curl直接粘貼 JCurlCommand(curl https://api.example.com/users \n -H Content-Type: application/json \n -H Authorization: Bearer ${token} \n --data-raw {\name\:\John\,\page\:1}) String getUsers(JQuickCurlReq req); }調(diào)用ApiService api JCurlInvoker.createProxy(ApiService.class); JQuickCurlReq req new JQuickCurlReq(); req.put(token, eyJhbGc...); String result api.getUsers(req);完畢。沒有手動拆 headers沒有手動拼 body沒有手動解析響應(yīng)。從復(fù)制到跑通30 秒。三、效率對比傳統(tǒng)方式 vs JQuickCurl以一個需要對接 10 個第三方接口的任務(wù)為例【傳統(tǒng)方式RestTemplate / OkHttp 手寫】拆解 curl 參數(shù) ~1 分鐘構(gòu)建 HttpHeaders ~1 分鐘拼裝請求體 ~1-2 分鐘執(zhí)行請求 ~1 分鐘解析響應(yīng) ~1-2 分鐘調(diào)試驗證 ~1 分鐘10 個接口總耗時 50-80 分鐘【JQuickCurl 方式】從瀏覽器/Postman 復(fù)制 curl ~5 秒粘貼到 JCurlCommand 注解 ~10 秒定義返回類型 ~10 秒調(diào)試驗證 ~15-30 秒10 個接口總耗時 5-10 分鐘效率提升5-8 倍 更重要的是不容易出錯。傳統(tǒng)方式手工拆解參數(shù)少一個 header、多一個引號都是 bug。JQuickCurl 直接用原始 curl瀏覽器里能跑通的代碼里就能跑通。四、三種復(fù)制場景全部支持場景 1Chrome DevTools - Copy as cURL在 Network 面板右鍵請求 - Copy - Copy as cURL粘貼即用JCurlCommand(curl https://api.github.com/user \n -H accept: application/json \n -H authorization: Bearer ${token}) JGithubAuth getUser(JQuickCurlReq req);場景 2Postman - Code - cURL在 Postman 中點擊 Code 按鈕選擇 cURL復(fù)制粘貼即用JCurlCommand(curl --location http://localhost:8080/api/users/create \n -H Content-Type: application/json \n -d {\name\:#{name},\email\:#{email}}) JUser createUser(Param(name) String name,Param(email) String email);場景 3API 文檔里的 curl 示例大部分 API 文檔Stripe、GitHub、微信開放平臺等都提供 curl 示例直接復(fù)制粘貼JCurlCommand(curl -X GET https://api.stripe.com/v1/customers \n -u ${sk_key}:) String listCustomers(JQuickCurlReq req);五、動態(tài)參數(shù)復(fù)制之后還能改粘貼的 curl 不一定全是靜態(tài)的。JQuickCurl 支持兩種變量替換${變量}運行時從 JQuickCurlReq 賦值適合 token、域名等動態(tài)配置// curl 里的 ${token} 運行時替換 JCurlCommand(curl -H Authorization: Bearer ${token} https://api.example.com/user) JUser getUser(JQuickCurlReq req); // 調(diào)用時賦值 req.put(token, Bearer xxx);#{變量}綁定方法參數(shù)適合業(yè)務(wù)參數(shù)直接傳遞// curl 里的 #{name} 綁定到方法參數(shù) JCurlCommand(curl -X POST ... -d {\name\:#{name}}) JUser create(Param(name) String name); // 調(diào)用時直接傳參 api.create(張三);復(fù)制粘貼的 curl 動態(tài)參數(shù)替換 既有文檔級的清晰度又有代碼級的靈活性。六、XML 配置方式接口多了也能管當(dāng)項目里接口越來越多全部寫在注解里會顯得擁擠。JQuickCurl 和 MyBatis 一樣支持把 curl 命令統(tǒng)一放到 XML 文件里管理。接口定義和 curl 命令分離改接口不用動代碼改 curl 不用重新編譯。1. 在 resources 目錄下創(chuàng)建 apis.xml?xml version1.0 encodingUTF-8? !DOCTYPE curls PUBLIC -//PAOHAIJIAO//DTD API CURL 1.0//EN classpath:paohaijiao/dtd/Jquick-curl.dtd curls namespacecom.github.paohaijiao.test.xml.UserApi !-- 從瀏覽器復(fù)制的 curl直接粘貼到 curl 標簽里 -- curl namegetUserById returnClasscom.github.paohaijiao.test.model.JUser curl -X GET http://localhost:8080/api/users/1 /curl !-- 支持動態(tài)參數(shù) #{name} -- curl namecreateUser returnClasscom.github.paohaijiao.test.model.JUser curl -X POST http://localhost:8080/api/users/createUser \ -H Content-Type: application/json \ -d {name:#{name},email:#{email}} /curl !-- 支持全局變量 ${token} -- curl namegetUser returnClasscom.github.paohaijiao.model.JResult curl -X GET https://api.example.com/user \ -H Authorization: Bearer ${token} /curl !-- 文件上傳也能寫 -- curl nameupload returnClassjava.lang.String curl -X POST http://localhost:8080/api/users/upload \ -F fileD:\test\test.txt /curl !-- 文件下載 -- curl namedownload returnClassbyte[] curl -X GET http://localhost:8080/api/users/download/test.txt \ --output d://test//download.txt /curl /curls2. Java 接口只寫方法簽名干凈利落public interface UserApi { JUser getUserById(JQuickCurlReq req); JUser createUser(Param(name) String name, Param(email) String email); JResult getUser(JQuickCurlReq req); String upload(JQuickCurlReq req); byte[] download(JQuickCurlReq req); }3. 通過工廠加載 XML創(chuàng)建代理JQuickParseHandler parser new JQuickCurlXmlParseFactory(); JQuickFactory factory new JQuickXmlFactory(parser, apis.xml); UserApi userApi factory.createApi(UserApi.class); // 調(diào)用 JQuickCurlReq req new JQuickCurlReq(); req.put(token, Bearer xxx); JUser user userApi.getUserById(req);XML 配置方式的好處集中管理 curl 命令統(tǒng)一放在 XML 里一目了然代碼干凈 接口代碼只有方法簽名沒有注解噪音免編譯 修改 curl 不需要重新編譯 Java 代碼零學(xué)習(xí)成本 和 MyBatis Mapper XML 用法完全一致粘貼即用 同樣支持從瀏覽器/Postman 復(fù)制的 curl工作流升級版瀏覽器復(fù)制 curl - 粘貼到 XML 的 curl 標簽 - 定義接口方法 - 調(diào)用連注解都不用寫直接粘到 XML 里就行。七、完整工作流從調(diào)試到上線Step 1 瀏覽器/Postman 調(diào)試接口確認參數(shù)正確Step 2 復(fù)制 curl 命令Step 3 粘貼到 JCurlCommand 注解 或 XML curl 標簽Step 4 定義返回類型創(chuàng)建代理調(diào)用Step 5 上線public interface OrderApi { JCurlCommand(curl -X POST http://order-service/api/orders \n -H Content-Type: application/json \n -H Authorization: Bearer ${token} \n -d {\productId\:#{productId},\quantity\:#{qty}}) JOrder createOrder(Param(productId) String productId,Param(qty) int qty); }OrderApi api JCurlInvoker.createProxy(OrderApi.class); JOrder order api.createOrder(P001, 5);從調(diào)試到上線curl 命令一個字都沒改。瀏覽器里跑通的生產(chǎn)環(huán)境一樣跑通。八、還支持這些 curl 特性從瀏覽器和 Postman 復(fù)制的 curl 通常包含各種選項JQuickCurl 全部支持-H / --header 請求頭Content-Type、Authorization 等-d / --data POST 請求體--data-raw 原始請求體不解析 --data-urlencode URL 編碼的表單數(shù)據(jù)-X / --request 指定 HTTP 方法-u / --user 基礎(chǔ)認證用戶名:密碼-F / --form 文件上傳multipart/form-data-o / --output 文件下載-L / --location 跟隨重定向--max-redirs 最大重定向次數(shù)-x / --proxy HTTP/HTTPS 代理--socks5-hostname SOCKS5 代理--http2 HTTP/2 協(xié)議-k / --insecure 跳過 SSL 證書校驗-I 僅獲取響應(yīng)頭HEAD 請求也就是說你在瀏覽器里復(fù)制出來的 curl 是什么樣貼進去就是什么樣。不用刪選項不用改格式不用做任何適配。九、誰適合用- 后端開發(fā)者 對接第三方 API頻繁從文檔/Postman 復(fù)制 curl- 爬蟲工程師 瀏覽器里調(diào)通請求直接粘貼成代碼- 測試工程師 把 Postman 調(diào)試通過的 curl 快速轉(zhuǎn)成可執(zhí)行代碼- 微服務(wù)團隊 服務(wù)間調(diào)用用 curl 風(fēng)格定義統(tǒng)一管理- 金融支付團隊 對接支付網(wǎng)關(guān)curl 命令直接來自銀行/支付平臺文檔十、快速開始Step 1添加 Maven 依賴dependency groupIdio.github.paohaijiao/groupId artifactIdjquick-curl/artifactId version${latest.version}/version /dependencyStep 2從瀏覽器復(fù)制 curl粘貼到注解public interface GithubApi { JCurlCommand(curl -u ${user}:${token} https://api.github.com/user -X GET) JGithubAuth getUser(JQuickCurlReq req); }Step 3創(chuàng)建代理調(diào)用GithubApi api JCurlInvoker.createProxy(GithubApi.class); JQuickCurlReq req new JQuickCurlReq(); req.put(user, your-emailexample.com); req.put(token, your-token); JGithubAuth auth api.getUser(req); System.out.println(auth);完成。從復(fù)制到跑通一分鐘內(nèi)搞定??偨Y(jié)傳統(tǒng) HTTP 客戶端開發(fā)的問題在于curl 已經(jīng)完整描述了請求但你還得手動翻譯成 Java 代碼。這是一道不必要的翻譯工序。JQuickCurl 的核心價值粘貼即用 瀏覽器/Postman 復(fù)制的 curl原樣粘貼即可使用零翻譯 零拆解、零手工拼裝動態(tài)參數(shù) 支持 ${} 和 #{} 兩種變量替換XML 配置 curl 命令集中管理改 curl 不用重新編譯全選項支持 headers、auth、form、proxy、SSL 等全兼容效率提升 5-8 倍且不易出錯兼容性 Java 8Apache License 2.0 開源下次從瀏覽器復(fù)制 curl 的時候別再手動翻譯了。粘貼進去直接跑。---------------------------------------------------------------------------------------------------------------------------------GitHub: https://github.com/paohaijiao/jquick-curlLicense: Apache License 2.0Contact: goudingchenggmail.com如果對你有幫助歡迎 Star 支持