前言
從企業級專案來說,如果你專案裡還在用傳統的程式設計式Http客戶端比如HttpClient、Okhttp去直接對接第三方Http介面,
那麼你專案一定充斥著大量的對接邏輯和程式碼, 並且針對不同的對接渠道方需要每次封裝一次呼叫的簡化,
一旦封裝不好系統將會變得難以維護,難以閱讀, 甚至不同的開發同學會用自己的方式用不同的Http客戶端用不同的封裝邏輯去對接介面,
這種情況一般發生於專案換了維護者,技術負責人也沒把控程式碼質量和規範所導致
如果你的專案裡也存在這樣的問題或者需要解決這樣的問題, 那麼UniHttp
就是你的版本答案。
2、快速開始
2.1、引入依賴
<dependency>
<groupId>io.github.burukeyou</groupId>
<artifactId>uniapi-http</artifactId>
<version>0.0.4</version>
</dependency>
2.2、對接介面
首先隨便建立一個介面,然後在介面上標記@HttpApi註解,然後指定請求的域名url, 然後就可以在方法上去配置對接哪個介面。
比如下面兩個方法的配置則對接了以下兩個介面
GET http://localhost:8080/getUser和
POST http://localhost:8080/addUser
方法返回值定義成Http響應body對應的型別即可,預設會使用fastjson反序列化Http響應body的值為該型別物件。
@HttpApi(url = "http://localhost:8080")
interface UserHttpApi {
@GetHttpInterface("/getUser")
BaseRsp<String> getUser(@QueryPar("name") String param,@HeaderPar("userId") Integer id);
@PostHttpInterface("/addUser")
BaseRsp<Add4DTO> addUser(@BodyJsonPar Add4DTO req);
}
@QueryPar 表示將引數值放到Http請求的查詢引數內
@HeaderPar 表示將引數值放到Http請求的請求頭裡
@BodyJsonPar 表示將引數值放到Http請求body內,並且content-type是application/json
1、getUser方法最終構建的Http請求報文為
GET http://localhost:8080/getUser?name=param
Header:
userId: id
2、addUser最終構建的Http請求報文為
POST: http://localhost:8080/addUser
Header:
Content-Type: application/json
Body:
{"id":1,"name":"jay"}
2.3、宣告定義的HttpAPI的包掃描路徑
在spring的配置類上使用@UniAPIScan註解
標記定義的@HttpAPI的包掃描路徑,會自動為標記了@HttpApi介面生成代理物件並且注入到Spring容器中,
之後只需要像使用Spring的其他bean一樣,依賴注入使用即可
@UniAPIScan("com.xxx.demo.api")
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class,args);
}
}
2.4 依賴注入使用即可
這樣我們就可以像呼叫本地方法一樣去執行遠端PRC的http呼叫
@Service
class UserAppService {
@Autowired
private UserHttpApi userHttpApi;
public void doSomething(){
userHttpApi.getUser("jay",3);
}
}
最後
gitHub程式碼地址
新人開源專案,如果覺得專案有用,可以star下再次感謝!