Forest-极简的轻量级HTTP调用API框架

这篇具有很好参考价值的文章主要介绍了Forest-极简的轻量级HTTP调用API框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

是不是一想到要对接第三方系统接口就发愁,尤其是与其他系统有大量接口交互时,不得不应对各种请求方式、设置各种不同的头、不同的返回、需要权限或token验证等等,将头疼不已,即使有Httpclient似乎还是要写很多的代码,那么Forest将解决你这一烦恼。

一、简介

Forest是专注于简化HTTP客户端访问的一套极简好用的java语言框架,它以Java 接口+注解的形式将繁复的 HTTP 请求细节隐藏于背后,将HTTP请求与业务之间极度松耦合,使得开发人员既能专注自己的业务,又能轻松得搞定五花八门的HTTP请求,通过注解和拦截器的方式,能对极其方便的改造其请求URL、Header、Body,例如第三方系统接口一般都要鉴权,传token之类的,而Forest可以对访问做拦截,往有需要鉴权的访问中加入token。

更多详情请参考:Forest

二、使用

由于目前流行springboot,现在就以此为基础框架进行讲解。

1、引入

如果是maven构建的springboot项目,那么只需在pom.xml引入如下配置即可:

<dependency>
    <groupId>com.dtflys.forest</groupId>
    <artifactId>forest-spring-boot-starter</artifactId>
    <version>1.5.2-BETA</version>
</dependency>

同时加入json解析框架:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.73</version>
</dependency>

2、入门

在 Forest 中,请求绑定到某一接口方法上,调用该接口方法时,底层会去方式具体的请求,我们只需要关注接口方法上需要绑定的参数,请求头,返回值即可。

我们建一个接口类HelloClient:

package com.zl.demo.client;

import com.dtflys.forest.annotation.Request;

public interface HelloClient {
    @Request(url = "http://localhost:8088/hello")
    String helloForest();
}

如图:@Request直接将请求http://localhost:8088/hello绑定到HelloClient接口helloForest()方法上,默认GET请求,请求返回String值。

springboot只需在启动类中加入@ForestScan,并指向上面接口包的路径即可生效:

@SpringBootApplication
@Configuration
@ForestScan(basePackages = "com.zl.demo.client")
public class DemoSpringBoot {
    SpringApplication.run(DemoSpringBoot.class, args);
}

在业务代码中,直接调用

@Component
public class HelloService {
    
    // 注入自定义的 Forest 接口实例
    @Resource
    private HelloClient helloClient;

    public void testClient() {
        // 调用自定义的 Forest 接口方法
        // 等价于发送 HTTP 请求,请求地址和参数即为 helloForest 方法上注解所标识的内容
        String result = helloClient.helloForest();
        // result 即为 HTTP 请求响应后返回的字符串类型数据
        System.out.println(result);
    }

}

模板表达式

Forest的模板表达式是在普通的Java字符串中嵌入{表达式}来实现字符串和数据的动态绑定。

@Request(url = "http://localhost:8080/hello/{name}")
String send(@Var("name") String name);

@Request(url = "http://localhost:8080/hello/${name}")
String send(@Var("name") String name);

通过@Var或全局定义的变量名进行绑定

比如:send("world"),发送的真实请求就是:http://localhost:8080/hello/world

3、进阶

连接的简单配置

forest:
  backend: httpclient          # 配置后端HTTP API为 httpclient(默认为 okhttp3)
  max-connections: 1000        # 连接池最大连接数
  connect-timeout: 3000        # 连接超时时间,单位为毫秒
  read-timeout: 3000           # 数据读取超时时间,单位为毫秒

连接重试配置

forest:
  retry-count: 1 # 请求失败后重试次数,默认为0次不重试
  max-retry-interval: 1000 #重试间隔时间

类似spring拦截器,Forest支持针对Forest请求的拦截,可以进行统一的日志打印,token鉴权的处理,只需要实现com.dtflys.forest.interceptor.Interceptor接口

@Slf4j
@Component
public class AccessTokenInterceptor implements Interceptor {

    @Autowired
    private AccessConfig accessConfig;
    @Autowired
    private ClubService memberService;

    /**
     * 该方法在请求发送之前被调用, 若返回false则不会继续发送请求
     */
    @Override
    public boolean beforeExecute(ForestRequest request) {
        String uri = request.getUrl().replace("http://", "");
        log.info(">>>>>>>>>>>>>>>>>>>>>>>>uri:{}", uri);
        if (!Arrays.asList(accessConfig.getFileUplodUrl()).contains(uri)) {
            request.setDataType(ForestDataType.JSON);
            request.setContentType("application/json");
        }
        // 添加请求参数token
        if (Arrays.asList(accessConfig.getMemberTokenUrl()).contains(uri)) {
            String token = memberService.getToken();
            if (ObjectUtil.isEmpty(request.getHeader("token"))) {
              request.addHeader("token", token);
            }
        }
        //添加服务器统一请求地址
        request.setUrl(accessConfig.getMemberServerUrl() + uri);
        return true;
    }

    /**
     * 请求发送失败时被调用
     * @param e
     * @param forestRequest
     * @param forestResponse
     */
    @Override
    public void onError(ForestRuntimeException e, ForestRequest forestRequest, ForestResponse forestResponse) {}

    /**
     * 请求成功调用(错误异常统一处理)
     * @param o
     * @param forestRequest
     * @param forestResponse
     */
    @Override
    public void onSuccess(Object o, ForestRequest forestRequest, ForestResponse forestResponse) {
        log.info("url:【{}】,result:【{}】", forestRequest.getUrl(), "...");
        ClubResultDto weResultDto = JSONUtil.toBean(forestResponse.getContent(), ClubResultDto.class);
        if (null != weResultDto.getStatus() && null != weResultDto.getStatus().getCode() && !weResultDto.getStatus().getCode().equals(10000)) {
            throw new ForestRuntimeException(forestResponse.getContent());
        }
    }

更多请参考:Forest文章来源地址https://www.toymoban.com/news/detail-462807.html

到了这里,关于Forest-极简的轻量级HTTP调用API框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【HarmonyOS】API6使用storage实现轻量级数据存储

     写在前面 本篇内容基于API6 JS语言进行开发,通过结合轻量级数据存储开发指导的文档,帮助大家完成一个实际的代码案例,通过这个小案例,可以实现简单数据的存储。 参考文档:文档中心 1、页面布局 首先我们编写一个简单的页面布局,页面中只有一个文本和两个按钮

    2024年02月14日
    浏览(40)
  • QtWebApp介绍、下载和搭建http轻量级服务器Demo

    QtWepApp是一个C++中的HTTP服务器库,其灵感来自Java Servlet。适用于Linux、Windows、Mac OS和Qt Framework支持的许多其他操作系统。   QtWebApp包含以下组件: • HTTP(S)1.0和1.1服务器 • 模板引擎 • 缓冲记录器   这些组件可以相互独立地使用。一个非常小的用法示例: 官方: http:

    2024年02月12日
    浏览(93)
  • 扔掉okhttp、httpClient,这款轻量级 HTTP 神器好用到爆

    前言 功能特性 快速使用 HTTP请求相关注解 配置项说明 高级功能 全局拦截器 调用适配器和数据转码器 总结 在 SpringBoot 项目直接使用 okhttp 、 httpClient 或者 RestTemplate 发起 HTTP 请求,既繁琐又不方便统一管理。因此,在这里推荐一个适用于 SpringBoot 项目的轻量级HTTP客户端框架

    2024年02月07日
    浏览(75)
  • IDEA中的轻量级接口请求工具 | HTTP Client 新手指南

    新钛云服已累计为您分享 706 篇技术干货 一、 简介 HTTP Client 是 IDEA 自带的一款简洁轻量级的接口调用插件,通过它,我们能在 IDEA 上开发,调试,测试 RESTful Web 服务。 二、 快速上手 1、 首先要确保 HTTP Client 插件是安装启动的,默认是已安装启动的。若没有安装,在 File

    2024年02月03日
    浏览(51)
  • C++轻量级Web服务器TinyWebServer源码分析之http篇

    http类这篇个人觉得是最难同时也是最繁琐的一篇,本篇在基础知识方面,包括epoll、HTTP报文格式、状态码和有限状态机,不做赘述,所有源码分析的篇章基础知识会做单开一篇或者读者可以看 小白一文看懂社长服务器 来补基础知识。真的佩服那个叫社长的男人,我读代码且

    2024年02月10日
    浏览(48)
  • Mainflux IoT:Go语言轻量级开源物联网平台,支持HTTP、MQTT、WebSocket、CoAP协议

    Mainflux是一个由法国的创业公司开发并维护的 安全、可扩展 的开源物联网平台,使用 Go语言开发、采用微服务的框架。Mainflux支持多种接入设备,包括设备、用户、APP;支持多种协议,包括HTTP、MQTT、WebSocket、CoAP,并支持他们之间的协议互转。 Mainflux的南向接口连接设备,北

    2024年02月01日
    浏览(114)
  • Qt+QtWebApp开发笔记(一):QtWebApp介绍、下载和搭建基础封装http轻量级服务器Demo

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130631547 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中… 上一篇:没有了 下一篇:《Qt+Q

    2024年02月05日
    浏览(72)
  • cpp-httplib: 轻量级、高性能的C++ HTTP/HTTPS客户端和服务器库

    cpp-httplib 是一个轻量级且高效的 C++ HTTP/HTTPS 客户端和服务器库。它由 Hideaki Sone(yhirose)开发,并在 MIT 许可下发布。该项目的主要目标是提供一种简单易用的方式,在 C++ 应用程序中实现 HTTP 和 HTTPS 功能。 项目仓库地址:https://gitcode.com/yhirose/cpp-httplib cpp-httplib 可用于以下场

    2024年04月09日
    浏览(73)
  • PHP实现轻量级WEB服务器接收HTTP提交的RFID刷卡信息并回应驱动读卡器显示播报语音

     本示例使用的读卡器:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com)

    2024年02月12日
    浏览(40)
  • Python实现轻量级WEB服务器接收HTTP提交的RFID刷卡信息并回应驱动读卡器显示播报语音

     本示例使用的设备:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com)

    2024年02月12日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包