# restful-tool
**Repository Path**: zero0411/restful-tool
## Basic Information
- **Project Name**: restful-tool
- **Description**: 基于JDK动态代理开发的实现restFul的http工具包; 采用插件式开发、用户可随意替换部分或全部插件更符合不同项目使用
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 7
- **Created**: 2024-04-09
- **Last Updated**: 2025-01-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# restful-tool
#### 介绍
基于接口代理的restFul http接口调用
#### 软件架构
基于JDK动态代理开发的实现restFul的http工具包;
采用插件式开发、用户可随意替换部分或全部插件更符合不同项目使用
#### 效果展示

#### 使用说明
1. 添加依赖
```xml
io.github.loserya
restful-spring-boot-starter
1.0.0
```
2. 启动类添加注解开启功能
```java
@EnableAnnoProxy(basePackages = {"com.loser"})
@EnableRestFulClient
```
3. 添加接口并标记相关注解实现代理
```java
@RestFulClient(host = "https://api.oioweb.cn", timeOut = 10000)
@RequestRetry(retryNum = 2, sleepTime = 50)
@RequestRollBack(rollBack = ProxyServiceRollBack.class)
public interface ProxyService {
@GetMapping("/api/common/teladress/{test}")
String getInfoByPhone(@RequestParam("mobile") String mobile, @PathVariable("test") String test);
@GetMapping(value = "/api/qq/info", timeOut = 500, headers = {"anchor=loser"})
QQResult getInfoByQQ(@RequestParam("qq") String qq);
@PostMapping("/test/json")
String getByJson(@RequestBody Map req);
@PostMapping(value = "/api/ocr/recognition", timeOut = 60000, bodyType = ReqBodyType.FORM)
PicResult checkPick(@RequestBody Map req);
@GetMapping(value = "/api/qq/info", timeOut = 500, headers = {"anchor=loser"})
BaseResult getInfoByQQ2(@RequestParam("qq") String qq);
@PostMapping(value = "/api/ocr/recognition", timeOut = 10000, bodyType = ReqBodyType.FORM)
BaseResult> recognition(@RequestBody Map body);
}
```
4. 项目核心注解
| 序号 | 注解 | 功能 | 作用范围 |
|----|----------------------|------------|------------|
| 1 | @EnableAnnoProxy | 开启接口代理 | 启动类、配置类 |
| 2 | @EnableRestFulClient | 总开关 | 启动类、配置类 |
| 3 | @PostMapping | 发送post请求 | 接口方法 |
| 4 | @GetMapping | 发送get请求 | 接口方法 |
| 5 | @PutMapping | 发送put请求 | 接口方法 |
| 6 | @DeleteMapping | 发送delete请求 | 接口方法 |
| 7 | @RequestBody | 请求参数体 | 方法参数(引用类) |
| 8 | @RequestParam | url?携带参数 | 方法参数(基本类型) |
| 9 | @PathVariable | url路径变量 | 方法参数(基本类型) |
| 10 | @RequestRollBack | 请求降级 | 接口、接口方法 |
| 11 | @RequestRetry | 请求重试 | 接口、接口方法 |
| 12 | @RequestLimit | 请求限制 | 接口、接口方法 |
5. 项目核心类
```java
com.loser.core.support.base.BaseRestFulHandlerFactory
集中管理所有功能插件的工厂生产者,需要替换全部插件实现改接口并注入容器可以实现全部插件替换
注意点:
单例且对象在容器中的名称必须为 restFulHandlerFactory
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (Objects.nonNull(baseRestFulHandlerFactory)) {
return;
}
if (applicationContext.containsBean(Constant.BEAN.FACTORY)) {
baseRestFulHandlerFactory = applicationContext.getBean(Constant.BEAN.FACTORY, BaseRestFulHandlerFactory.class);
} else {
baseRestFulHandlerFactory = new RestFulHandlerFactory();
}
}
```
6. 核心插件(2024.04.22更新 插件将接口替换成抽象类,添加final避免核心方法被修改)
| 序号 | 插件 | 返回值 | 功能 |
|----|------------------------------------|---------------------|------------------------------|
| 1 | RequestMethodBuildHandlerInPlugin | ReqMethod | 构建请求方式 |
| 2 | RequestUrlBuildHandlerInPlugin | RequestUrl | 构建请求URL |
| 3 | RequestHeadBuildHandlerInPlugin | ReqHead | 构建请求头 |
| 4 | RequestBodyBuildHandlerInPlugin | ReqBody | 构建请求体 |
| 5 | RestFulHttpExecutorHandlerInPlugin | String | 构建请求执行器 |
| 6 | RestConverterHandlerInPlugin | Object | 返回值转换 |
| 7 | RequestHeadHandlerInPlugin | Map | 请求头额外补充(sign、token等需要代码处理场景) |
| 8 | RequestTimeOutBuildHandlerInPlugin | TimeOut | 构建请求超时参数 |
| 9 | RequestRollBackHandlerInPlugin | Object | 构建请求异常降级处理 |
| 10 | RequestRetryHandlerInPlugin | Object | 构建请求重试 |
| 11 | RequestLimitHandlerInPlugin | void | 构建请求限制 |
```java
注意点
单例,容器内最多添加一个实现类,不添加则使用core包中提供的默认是实现
```
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request