Java Http 接口对接太繁琐?试试 UniHttp 框架~
在企业级项目开发中,HTTP接口对接是一项常见且重要的任务。传统的编程式HTTP客户端(如HttpClient、Okhttp)虽然功能强大,但往往需要编写大量冗长且复杂的代码,这对于项目的可维护性和可读性都是一个挑战。幸运的是,UniHttp框架的出现为这一问题提供了优雅的解决方案。
UniHttp框架简介
UniHttp是一个声明式的HTTP接口对接框架,它能够极大地简化HTTP请求的发送过程。使用UniHttp,开发者可以像调用本地方法一样发起HTTP请求,而无需关注请求的发送细节、参数传递、结果处理和反序列化等问题。这种框架的设计哲学是将HTTP请求的复杂性封装起来,让开发者更专注于业务逻辑的实现。
快速开始
引入依赖
首先,需要在项目的pom.xml
文件中引入UniHttp的依赖:
<dependency>
<groupId>io.github.burukeyou</groupId>
<artifactId>uniapi-http</artifactId>
<version>0.0.4</version>
</dependency>
对接接口
接下来,可以创建一个接口,并使用@HttpApi
注解来标记。在接口中定义的方法将对应于要对接的HTTP接口。例如:
@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);
}
在这里,@GetHttpInterface
和@PostHttpInterface
注解分别用于定义GET和POST请求,而@QueryPar
、@HeaderPar
和@BodyJsonPar
注解用于指定请求的查询参数、请求头和请求体。
配置自定义的Http客户端
默认情况下,UniHttp使用的是Okhttp客户端。如果需要自定义HttpClient,可以在Spring的配置类中定义一个OkHttpClient
的Bean:
@Configuration
public class CustomConfiguration {
@Bean
public OkHttpClient myOHttpClient(){
return new OkHttpClient.Builder()
.readTimeout(50, TimeUnit.SECONDS)
.writeTimeout(50, TimeUnit.SECONDS)
.connectTimeout(10, TimeUnit.SECONDS)
.connectionPool(new ConnectionPool(20,10, TimeUnit.MINUTES))
.build();
}
}
企业级渠道对接实战
假设我们需要对接一个天气服务的所有接口,这些接口需要在请求的cookie中带上token和sessionId字段,这些字段需要通过调用特定接口获取。此外,还需要在请求头上带上一个签名字段,该字段的生成规则需要用渠道方提供的公钥对所有请求体和请求参数进行加签生成。
在application.yml
中配置对接渠道方的信息
channel:
mtuan:
url: http://127.0.0.1:8999
appId: UUU-asd-01
publicKey: fajdkf9492304jklfahqq
自定义该渠道方的HttpAPI注解
通过定义自定义注解和处理器,可以轻松实现上述需求。例如,可以实现一个HttpApiProcessor
来处理请求前的签名、发送请求时的动态令牌获取和日志打印、响应后的数据处理等。
对接接口
使用@MTuanHttpApi
注解对接具体的接口,例如获取令牌和天气情况的接口。
自定义HttpApiProcessor
通过实现HttpApiProcessor
接口,可以自定义HTTP请求的生命周期钩子,例如在请求发送前对请求体进行加签、在发送请求时动态获取令牌重新构建请求体和打印日志、在发送请求后给响应对象设置code为999等。
总结
UniHttp框架通过提供声明式的HTTP接口对接方式,极大地简化了HTTP请求的发送过程。它不仅支持基本的GET、POST请求,还支持请求和响应的拦截器、自定义HTTP客户端配置等高级功能。使用UniHttp,开发者可以更加专注于业务逻辑的实现,而不是被HTTP请求的细节所困扰。如果你的项目中也需要对接第三方HTTP接口,不妨试试UniHttp框架,它可能会给你带来意想不到的便利和效率提升。