我爱说实话,Mica-Http 超好用!

开发 前端
mica-http 是基于 okhttp 的封装,提供了 Fluent 语法的 http 工具包。mica-http 的语法简单易懂,同时还具有更好的性能和更高的安全性(自动关闭资源)。另外 mica-http 带有 http 请求日志打印功能。

一、简介

mica-http 是基于 okhttp 的封装,提供了 Fluent 语法的 http 工具包。mica-http 的语法简单易懂,同时还具有更好的性能和更高的安全性(自动关闭资源)。另外 mica-http 带有 http 请求日志打印功能,

二、快速上手

1.1 导入依赖

<dependency>
 <groupId>net.dreamlu</groupId>
 <artifactId>mica-http</artifactId>
 <version>2.7.18.1</version>
</dependency>

1.2 快速开始

String html = HttpRequest.get("https://www.baidu.com")
 .useConsoleLog() // 日志,同类有useSlf4jLog()和useLog(log::info),日志级别默认为 BODY
 .execute()   // 执行,这里并非正在执行,这里只是转换成了执行对象
 .asString();     // 真正行并转换结果
System.out.println(html);

1.3 异步请求

// 发送异步请求
HttpRequest.delete("https://www.baidu.com")
    .async() // 开启异步
    .onFailed((request, e) -> {    // 异常时的处理
        e.printStackTrace();
    })
    .onResponse(responseSpec -> {  // 消费响应, 注意:响应的流只能读一次
        int httpCode = responseSpec.code();

    })
    .onSuccessful(responseSpec -> { // 消费响应成功 http code in [200..300)
        // 注意:响应结果流只能读一次
        JsonNode jsonNode = responseSpec.asJsonNode();
    })
    .execute(); // 异步最后发起请求

1.4 API说明

// 同步请求 url,方法支持 get、post、patch、put、delete
HttpRequest.get("https://www.baidu.com/{param1}/{param2}")
    // 使用 Slf4j 日志
 .useSlf4jLog() 
    // url 路径参数处理
 .pathParam("param1", "abc1") 
 .pathParam("param2", "abc2")
    // 添加 header
 .addHeader("x-account-id", "mica001") 
    // 添加 cookie
 .addCookie(builder -> builder.domain("www.baidu.com").name("name").value("value")) 
 // 设置 url 请求参数,默认进行 url encode
    .query("q", "mica") 
 .queryEncoded("name", "encodedValue")
    // 对结果集进行断言重试
 .retryOn(responseSpec -> !responseSpec.isOk()) 
    // 设置代理
 .proxy(InetSocketAddress.createUnresolved("127.0.0.1", 8080)) 
    // 表单构造器,同类 multipartFormBuilder 文件上传表单构造器
 .formBuilder()
    // 表单参数
 .add("id", 123123)  
    // 发起请求
 .execute()
    // 结果集转换,注:如果网络异常等会直接抛出异常,当然你还可以使用 onResponse、onSuccess 处理
 .asJsonNode();
// 同类的方法有 asString、asBytes
// json 类响应:asJsonNode、asValue、asList、asMap、atJsonPath等,采用 jackson 处理
// file 文件:toFile
// 转换成文件上传的 Part:asPart 系列方法。

1.5 全局配置

全局日志配置:

// 设定全局日志级别 **NONE**(不打印日志)、 **BASIC**(只打印请求行和响应行)、 **HEADERS**(在BASIC的基础上打印出请求头)、 **BODY**(在BASIC的基础上打印出请求和响应体)
HttpRequest.setGlobalLog(LogLevel.BODY);
// 设置控制台日志,用于没有日志依赖的 sdk 开发时使用
HttpRequest.setGlobalLog(HttpLogger.Console, LogLevel.BODY);
// 当然你也可以设定为自己的 log,这样就不用把 **net.dreamlu.mica.http** 包的日志设置为 info 级别。
HttpRequest.setGlobalLog(log::info);

自定义 OkHttpClient

OkHttpClient httpClient = new OkHttpClient.Builder()
 .build();
HttpRequest.setHttpClient(httpClient);

1.6 Cookie管理

默认内置了 InMemoryCookieManager,会自动保存和使用 cookie,另外可以自定义实现 okhttp 的 CookieJar。

InMemoryCookieManager cookieManager = new InMemoryCookieManager();
HttpRequest.get("http://fast.dreamlu.net/api/auth/captcha")
 .cookieManager(cookieManager)
 .execute()
 .asString();

三、性能优异

http 压测结果报告

第一轮

Benchmark                           Mode  Cnt    Score     Error    Units
MicaHttpBenchmark.micaHttp         thrpt    5  899.299 ± 208.080  ops/min
MicaHttpBenchmark.okHttp           thrpt    5  841.669 ± 106.094  ops/min
MicaHttpBenchmark.protoTypeOkHttp  thrpt    5  346.647 ±  23.664  ops/min

第二轮

Benchmark                           Mode  Cnt    Score     Error    Units
MicaHttpBenchmark.micaHttp         thrpt    5  876.651 ± 276.569  ops/min
MicaHttpBenchmark.okHttp           thrpt    5  899.365 ± 194.188  ops/min
MicaHttpBenchmark.protoTypeOkHttp  thrpt    5  341.028 ±  34.713  ops/min

第三轮

Benchmark                           Mode  Cnt    Score     Error    Units
MicaHttpBenchmark.micaHttp         thrpt    5  944.017 ± 175.509  ops/min
MicaHttpBenchmark.okHttp           thrpt    5  875.143 ± 164.594  ops/min
MicaHttpBenchmark.protoTypeOkHttp  thrpt    5  331.370 ±  19.136  ops/min

解读

  • mica-http 对 okhttp 进行增强会复用OkHttpClient和连接池,并没有明显的性能损耗,偶尔结果还比 okhttp 表现得好。
  • protoTypeOkHttp 采用的是每次 new OkHttpClient() 性能损耗明显非常明显,而且高并发下还有内存泄露,所以大家在使用时一定要注意。

四、安全

mica-http 在执行时会使用 try-with-resource语法自动关流,所以在使用时不用担心流关闭问题。

责任编辑:武晓燕 来源: JAVA架构日记
相关推荐

2020-12-08 10:25:56

HibernateMyBatis数据库

2022-08-03 13:56:10

互联网跳槽

2023-04-14 07:49:26

iOS安卓

2021-12-30 10:28:22

鸿蒙HarmonyOS应用

2024-04-28 12:47:03

数据业务

2021-04-29 08:27:06

druidundertowMetrics

2020-11-12 10:00:56

Kubernetes工具Linux

2020-08-12 09:35:23

Docker工具开源

2020-01-30 17:58:56

GitHub代码开发者

2020-10-13 08:10:33

Exa命令工具

2023-12-05 13:27:00

Jackson语法

2021-05-10 07:35:11

SwaggeYApi部署

2023-03-16 12:14:55

2021-05-28 09:51:32

开源技术 工具

2018-03-12 11:52:44

2019-07-02 10:15:42

Windows 10

2024-01-22 13:15:00

2019-04-03 14:12:19

抖单分析可视化

2017-07-20 16:40:36

大数据分析工具

2022-12-26 23:38:10

浏览器扩展工具
点赞
收藏

51CTO技术栈公众号