告别HttpClient!开源Forest框架让远程调用如此简单

背景


开门三板斧



  • 我是谁?

Forest 是一款声明式与编程式双修的 Java HTTP 客户端框架,也就是说它能通过声名式与编程式两种风格的代码来发送 HTTP 请求

  • 我在哪?

新手介绍 | Forest

  • 我能行?
  1. 同时支持编程式与声明式的请求发送方式
  2. 以Httpclient和OkHttp为后端框架
  3. 通过调用本地方法的方式去发送Http请求, 实现了业务逻辑与Http协议之间的解耦
  4. 因为针对第三方接口,所以不需要依赖Spring Cloud和任何注册中心
  5. 支持所有请求方法:GET, HEAD, OPTIONS, TRACE, POST, DELETE, PUT, PATCH
  6. 支持文件上传和下载
  7. 支持灵活的模板表达式
  8. 支持拦截器处理请求的各个生命周期
  9. 支持自定义注解
  10. 支持OAuth2验证
  11. 支持过滤器来过滤传入的数据
  12. 基于注解、配置化的方式定义Http请求
  13. 支持Spring和Springboot集成
  14. JSON格式数据序列化和反序列化
  15. XML格式数据序列化和反序列化
  16. Protobuf格式数据序列化和反序列化
  17. JSON、XML或其他类型转换器可以随意扩展和替换
  18. 支持JSON转换框架: Fastjson2, Fastjson1, Jackson, Gson
  19. 支持JAXB形式的XML转换
  20. 可以通过OnSuccess和OnError接口参数实现请求结果的回调
  21. 配置简单,一般只需要@Request一个注解就能完成绝大多数请求的定义
  22. 支持异步请求调用
  23. 支持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 调用熬过最晚的一次是几点? 评论区分享你的故事~
关注我,解锁更多‘让编码更优雅’的黑科技!

原文链接:,转发请注明来源!