Java Http 接口对接太繁琐?试试 UniHttp 框架~

简介: 【10月更文挑战第10天】在企业级项目开发中,HTTP接口对接是一项常见且重要的任务。传统的编程式HTTP客户端(如HttpClient、Okhttp)虽然功能强大,但往往需要编写大量冗长且复杂的代码,这对于项目的可维护性和可读性都是一个挑战。幸运的是,UniHttp框架的出现为这一问题提供了优雅的解决方案。

Java Http 接口对接太繁琐?试试 UniHttp 框架~

在企业级项目开发中,HTTP接口对接是一项常见且重要的任务。传统的编程式HTTP客户端(如HttpClient、Okhttp)虽然功能强大,但往往需要编写大量冗长且复杂的代码,这对于项目的可维护性和可读性都是一个挑战。幸运的是,UniHttp框架的出现为这一问题提供了优雅的解决方案。

UniHttp框架简介

UniHttp是一个声明式的HTTP接口对接框架,它能够极大地简化HTTP请求的发送过程。使用UniHttp,开发者可以像调用本地方法一样发起HTTP请求,而无需关注请求的发送细节、参数传递、结果处理和反序列化等问题。这种框架的设计哲学是将HTTP请求的复杂性封装起来,让开发者更专注于业务逻辑的实现。

快速开始

引入依赖

首先,需要在项目的pom.xml文件中引入UniHttp的依赖:

<dependency>
    <groupId>io.github.burukeyou</groupId>
    <artifactId>uniapi-http</artifactId>
    <version>0.0.4</version>
</dependency>

对接接口

接下来,可以创建一个接口,并使用@HttpApi注解来标记。在接口中定义的方法将对应于要对接的HTTP接口。例如:

@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);
}

在这里,@GetHttpInterface@PostHttpInterface注解分别用于定义GET和POST请求,而@QueryPar@HeaderPar@BodyJsonPar注解用于指定请求的查询参数、请求头和请求体。

配置自定义的Http客户端

默认情况下,UniHttp使用的是Okhttp客户端。如果需要自定义HttpClient,可以在Spring的配置类中定义一个OkHttpClient的Bean:

@Configuration
public class CustomConfiguration {
   
    @Bean
    public OkHttpClient myOHttpClient(){
   
        return new OkHttpClient.Builder()
            .readTimeout(50, TimeUnit.SECONDS)
            .writeTimeout(50, TimeUnit.SECONDS)
            .connectTimeout(10, TimeUnit.SECONDS)
            .connectionPool(new ConnectionPool(20,10, TimeUnit.MINUTES))
            .build();
    }
}

企业级渠道对接实战

假设我们需要对接一个天气服务的所有接口,这些接口需要在请求的cookie中带上token和sessionId字段,这些字段需要通过调用特定接口获取。此外,还需要在请求头上带上一个签名字段,该字段的生成规则需要用渠道方提供的公钥对所有请求体和请求参数进行加签生成。

application.yml中配置对接渠道方的信息

channel:
  mtuan:
    url: http://127.0.0.1:8999
    appId: UUU-asd-01
    publicKey: fajdkf9492304jklfahqq

自定义该渠道方的HttpAPI注解

通过定义自定义注解和处理器,可以轻松实现上述需求。例如,可以实现一个HttpApiProcessor来处理请求前的签名、发送请求时的动态令牌获取和日志打印、响应后的数据处理等。

对接接口

使用@MTuanHttpApi注解对接具体的接口,例如获取令牌和天气情况的接口。

自定义HttpApiProcessor

通过实现HttpApiProcessor接口,可以自定义HTTP请求的生命周期钩子,例如在请求发送前对请求体进行加签、在发送请求时动态获取令牌重新构建请求体和打印日志、在发送请求后给响应对象设置code为999等。

总结

UniHttp框架通过提供声明式的HTTP接口对接方式,极大地简化了HTTP请求的发送过程。它不仅支持基本的GET、POST请求,还支持请求和响应的拦截器、自定义HTTP客户端配置等高级功能。使用UniHttp,开发者可以更加专注于业务逻辑的实现,而不是被HTTP请求的细节所困扰。如果你的项目中也需要对接第三方HTTP接口,不妨试试UniHttp框架,它可能会给你带来意想不到的便利和效率提升。

目录
相关文章
|
4月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
5月前
|
人工智能 Java 开发者
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
JManus是阿里开源的Java版OpenManus,基于Spring AI Alibaba框架,助力Java开发者便捷应用AI技术。支持多Agent框架、网页配置、MCP协议及PLAN-ACT模式,可集成多模型,适配阿里云百炼平台与本地ollama。提供Docker与源码部署方式,具备无限上下文处理能力,适用于复杂AI场景。当前仍在完善模型配置等功能,欢迎参与开源共建。
2333 58
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
|
4月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
259 8
|
4月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
4月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
146 7
|
5月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
190 11
|
4月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
257 1
|
6月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
434 23
|
5月前
|
SQL Java 数据库连接
区分iBatis与MyBatis:两个Java数据库框架的比较
总结起来:虽然从技术角度看,iBATIS已经停止更新但仍然可用;然而考虑到长期项目健康度及未来可能需求变化情况下MYBATISS无疑会是一个更佳选择因其具备良好生命周期管理机制同时也因为社区力量背书确保问题修复新特征添加速度快捷有效.
342 12
|
6月前
|
存储 缓存 安全
Java集合框架(三):Map体系与ConcurrentHashMap
本文深入解析Java中Map接口体系及其实现类,包括HashMap、ConcurrentHashMap等的工作原理与线程安全机制。内容涵盖哈希冲突解决、扩容策略、并发优化,以及不同Map实现的适用场景,助你掌握高并发编程核心技巧。