鸿蒙开源第三方组件——OkHttp请求转化组件Ok2curl 精华
前言
基于安卓平台既有的请求转化工具组件Ok2Curl(原链接), 实现鸿蒙的功能化迁移。
代码已经开源到(开源链接),欢迎相关各位开发者或使用者参与讨论并给出提出宝贵意见。
概述
ok2curl主要用于,将OkHttp格式的请求的字符串,整合并转换为curl格式的字符串。
转换后的curl格式字符串,更具备泛用性,可直接导入Postman等第三方软件来实现快速请求。
组件功能展示
1.Sample界面
2.Get请求结果(点击第一个按钮)
3.Post请求结果(点击第二个按钮)
4.更改过header的Get请求结果(点击第三个按钮)
组件在项目中的引入(maven)
allprojects{
repositories{
mavenCentral()
}
}
dependencies {
implementation 'io.github.dzsf:ok2curl:1.0.0'
}
Sample解析
1.http请求的不同类别
按照请求方式将http请求,分为GET请求、POST请求、更改过header的GET请求,
以上述三种类别作为主要示例,设计3种不同的请求方式,各自用一个按钮来绑定并展示。
而在实现上,通过对请求类型的区分,只使用 getRequest()一个方法,封装更加优雅
public static Request getRequest(String type) {
switch (type) {
case TYPE_GET:
return sampleGetRequest();
case TYPE_POST:
return samplePostRequest();
case TYPE_GET_MODIFIED:
return modifiedGetRequest();
default:
throw new IllegalArgumentException("Invalid request type");
}
}
2.Sample的核心实现
1)OkHttp请求字符串的组装
因为组件的核心功能就是将OkHttp请求字符串转化成另一个格式,作为数据的源头,各种OkHttp请求(带有各种附加属性)的组织和封装就是首要任务。
在数据组织上,请求的数据需要延续 OkHttp的请求方式,
使用第三方开放组件okhttp3.Request的Builder()接口来组织我们的原始请求:
以最简单的Get请求为例
// 引入第三方包
import okhttp3.Request;
// ~
// 创建请求实例,组织请求信息
return new Request.Builder()
.url("所需要get请求的uri")
.cacheControl(CacheControl.FORCE_CACHE)
.build();
真正与之对接的,是组件自封装的CurlBuilder类的各种构造方法,
这些构造方法,okhttp3.Request类型的入参是其默认首个参数,
它们实现了对各种请求参数的实际组织和封装。
// 引入自封装的CurlBuilder类
import com.moczul.ok2curl.CurlBuilder;
// ~
final String curl = new CurlBuilder(
RequestFactory.getRequest(type),
-1L, modifiers, Options.EMPTY)
.build();
2)鸿蒙UI上的组件映射
import com.moczul.ok2curl.ResourceTable;
// ~
super.setUIContent(ResourceTable.Layout_ability_main);
// ~
findComponentById(ResourceTable.Id_get_request)
.setClickedListener(this);
鸿蒙为了方便广大开发者,在UI组件的布局上,使用xml格式的映射表。
上面的"Layout_ability_main"就指向了工程中路径为
/resource/base/layout/ability_main.xml 配置文件。
<Button
ohos:id="$+id:get_request"
ohos:height="match_content"
ohos:width="match_parent"
ohos:top_padding="16vp"
~
ohos:bottom_margin="5vp"
ohos:text_size="50"
ohos:clickable="true"
ohos:background_element="$graphic:button_element"
ohos:text="$string:sample_get_request" />
第一段代理里的"ResourceTable.Id_get_request",
其中的’Id_get_request’即会通过映射查找,
定位到第二段代码中的ohos:id为 get_request 的画面元素
项目贡献人
刘方蕾 夏金 柴柏新
结语
项目地址: gitee
欢迎大家批评指导~