前言
从企业级项目来说,如果你项目里还在用传统的编程式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);
}
}
最后
新人开源项目,如果觉得项目有用,可以star下再次感谢!
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容