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框架,它可能会给你带来意想不到的便利和效率提升。

目录
相关文章
|
2天前
|
存储 Java
Java集合框架中的HashSet和TreeSet,解释了它们如何分别实现无序和有序存储。
【10月更文挑战第13天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解释了它们如何分别实现无序和有序存储。通过解析内部机制和示例代码,帮助读者理解这两种集合的特点和应用场景,从而更好地选择合适的集合类型满足实际需求。
10 3
|
2天前
|
存储 Java 数据处理
Java中的Set接口以其独特的“不重复”特性,在集合框架中占据重要地位。
【10月更文挑战第13天】Java中的Set接口以其独特的“不重复”特性,在集合框架中占据重要地位。本文通过两个案例展示了Set的实用性和高效性:快速去重和高效查找。通过将列表转换为HashSet,可以轻松实现去重;而Set的contains方法则提供了高效的元素查找功能。这些特性使Set在处理大量数据时表现出色,值得我们在日常编程中充分利用。
11 3
|
6天前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
12 1
|
7天前
|
JSON Java fastjson
Java Http 接口对接太繁琐?试试 UniHttp 框架吧
UniHttp 是一个声明式的 HTTP 接口对接框架,旨在简化第三方 HTTP 接口的调用过程。通过注解配置,开发者可以像调用本地方法一样发起 HTTP 请求,无需关注请求的构建和响应处理细节。框架支持多种请求方式和参数类型,提供灵活的生命周期钩子以满足复杂的对接需求,适用于企业级项目的快速开发和维护。GitHub 地址:[UniAPI](https://github.com/burukeYou/UniAPI)。
|
Web App开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
TCP洪水攻击(SYN Flood)的诊断和处理 Posted by  海涛  on 2013 年 7 月 11 日 Tweet1 ​1. SYN Flood介绍 前段时间网站被攻击多次,其中最猛烈的就是TCP洪水攻击,即SYN Flood。
991 0
|
SQL Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
在运行一个group by的sql时,抛出以下错误信息: Task with the most failures(4):  -----Task ID:  task_201411191723_723592_m_000004URL:  http://DDS0204.
962 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
ZooKeeper 保证了数据的强一致性,  zk集群中任意节点(一个zkServer)上的相同znode下的数据一定是相同的。
795 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
最近在线上往hbase导数据,因为hbase写入能力比较强,没有太在意写的问题。让业务方进行历史数据的导入操作,中间发现一个问题,写入速度太快,并且业务数据集中到其中一个region,这个region无法split掉,处于不可用状态。
1337 0
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Hbase依赖的datanode日志中如果出现如下报错信息:DataXceiverjava.io.EOFException: INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in receiveBlock for block  解决办法:Hbase侧配置的dfs.socket.timeout值过小,与DataNode侧配置的 dfs.socket.timeout的配置不一致,将hbase和datanode的该配置调成大并一致。
795 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Every Programmer Should Know These Latency Numbers 1秒=1000毫秒(ms) 1秒=1,000,000 微秒(μs) 1秒=1,000,000,000 纳秒(ns) 1秒=1,000,000,000,000 皮秒(ps) L1 cache reference .
645 0

热门文章

最新文章