背景
开门三板斧
- 我是谁?
Forest 是一款声明式与编程式双修的 Java HTTP 客户端框架,也就是说它能通过声名式与编程式两种风格的代码来发送 HTTP 请求
- 我在哪?
- 我能行?
- 同时支持编程式与声明式的请求发送方式
- 以Httpclient和OkHttp为后端框架
- 通过调用本地方法的方式去发送Http请求, 实现了业务逻辑与Http协议之间的解耦
- 因为针对第三方接口,所以不需要依赖Spring Cloud和任何注册中心
- 支持所有请求方法:GET, HEAD, OPTIONS, TRACE, POST, DELETE, PUT, PATCH
- 支持文件上传和下载
- 支持灵活的模板表达式
- 支持拦截器处理请求的各个生命周期
- 支持自定义注解
- 支持OAuth2验证
- 支持过滤器来过滤传入的数据
- 基于注解、配置化的方式定义Http请求
- 支持Spring和Springboot集成
- JSON格式数据序列化和反序列化
- XML格式数据序列化和反序列化
- Protobuf格式数据序列化和反序列化
- JSON、XML或其他类型转换器可以随意扩展和替换
- 支持JSON转换框架: Fastjson2, Fastjson1, Jackson, Gson
- 支持JAXB形式的XML转换
- 可以通过OnSuccess和OnError接口参数实现请求结果的回调
- 配置简单,一般只需要@Request一个注解就能完成绝大多数请求的定义
- 支持异步请求调用
- 支持SSE
场景1 请求简单
HttpClient client = HttpClients.createDefault();
HttpGet request = new HttpGet("https://api.example.com/users/123");
request.addHeader("Authorization", "Bearer xxxxx");
//Forest解决方案:
@Get("https://api.example.com/users/{id}")
User getUser(@Header("Authorization") String token, @Param("id") String userId);
场景2 改个接口参数
//把userId改成uid
@Param("userId")
//Forest解放方案
@Param("uid") String userId
场景3 超时重试
forest:
retry-count: 3 # 自动重试3次
max-retry-interval: 10000 # 重试间隔
场景4 文件上传
// 传统方式需要手动构建多部分表单
HttpPost post = new HttpPost();
FileBody fileBody = new FileBody(file);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addPart("file", fileBody);
//Forest解放方案
@Post(url = "/upload", contentType = "multipart/form-data")
String upload(@DataFile("file") File file);
寄语
代码的世界里没有银弹,但好的工具能让我们少走弯路
你曾经因为 HTTP 调用熬过最晚的一次是几点? 评论区分享你的故事~
关注我,解锁更多‘让编码更优雅’的黑科技!