# transmit
**Repository Path**: lovesource/transmit
## Basic Information
- **Project Name**: transmit
- **Description**: transmit 是一个 HTTP 接口适配器
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: https://www.oschina.net/p/transmit
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 8
- **Created**: 2019-09-26
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# HTTP接口适配器:transmit
## 功能描述:
当项目中需要使用同一套数据对接多家第三方接口的时候, 比如对接保险公司接口, 对接支付公司接口. 以往的情况是针对每家公司的接口文档开发一套代码, 这样会添加很多不必要的工作量. 针对这种情况, 我开发了这个工具. 这个工具可以做到接口之间参数转换,转发. 节省了对接接口时的开发任务.
## 优点
1. 数据转换使用freemarker模板, 无需编写java代码.
2. 使用vert.x框架编写. 效率高, 代码量小.
3. 请求数据入库, 数据有迹可循.
4. 可自己编写插件, 完成其定义签名和自定义freemarker指令.
## 使用说明
#### 打包命令
```bash
git clone https://github.com/hjx601496320/transmit.git
cd transmit/
mvn package
cd target/
//解压
tar -zxvf transmit.tar.gz
//启动
sh bin/start.sh
```
#### 文件目录
```
├── bin 启动脚本
│ ├── restart.sh
│ ├── start.sh
│ └── stop.sh
├── config 配置
│ ├── config.json
│ └── logback.xml
├── lib
│ ├── commons-cli-1.4.jar 依赖
......
│ ├── transmit-1.0-SNAPSHOT.jar
│ ├── vertx-web-client-3.8.0.jar
│ └── vertx-web-common-3.8.0.jar
├── log 日志
│ ├── debug
│ │ └── debug.2019-09-17.log
│ ├── error
│ │ └── error.2019-09-17.log
│ └── info
│ └── info.2019-09-17.log
└── sout.log
```
### 配置说明
#### 示例配置
```json
{
其他配置
"config": {
是否缓存模板文件,默认true. 关闭的话每次请求会重新加载模板,方便调试.
"cache": true,
系统端口号
"port": 9090,
引用其他的配置文件的文件路径
"import": [
],
其他组件加载, 执行CLass.forName, 可以加载自己定义的一些插件, 完成类似数据入库, 接口签名之类的功能
"ext": [
"com.hebaibai.ctrt.Driver"
],
数据库配置, 用于保存接口请求日志
"db": {
"host": "127.0.0.1",
"database": "dbname",
"port": 3306,
"username": "root",
"password": "root"
}
},
配置示例
"config-demo": {
接受请求
"request": {
接受请求的地址 127.0.0.1:9090/download
"path": "/download",
请求的方式
"method": "GET",
请求参数类型: FORM(表单提交), JSON(json), QUERY(?key=value&key2=value), TEXT(文本), XML(xml),
"request-type": "QUERY",
返回参数类型
"response-type": "TEXT"
},
转发的接口配置
"api": {
接口请求地址
"url": "http://127.0.0.1:9003/api/download",
插件编号, 在ext中加载来的
"extCode": "null",
接口请求地址
"method": "GET",
请求参数类型
"request-type": "QUERY",
请求超时设置,默认3000 ms, 单位ms
"timeout": 1,
返回参数类型
"response-type": "TEXT",
请求参数转换模板
"request-ftl": "/home/hjx/work/myProject/transmit/file/download-req.ftl",
响应参数转换模板
"response-ftl": "/home/hjx/work/myProject/transmit/file/download-res.ftl"
}
}
}
```
#### 日志表sql
```sql
-- auto-generated definition
create table api_log
(
id varchar(64) null,
type_code varchar(64) null
comment '类型',
send_msg text null
comment '请求内容',
receive text null
comment '接口返回数据',
end_time datetime null
comment '请求耗时',
create_time datetime null
comment '请求时间',
status int null
comment '状态1:success, 0:error'
)
comment '接口请求日志';
```
## 接口转换示例
### 请求参数:
```xml
XXX-1
d83a011a-958d-4310-a51b-0fb3a4228ef5
0
123123123
asdasdasd
1
```
### 转发接口需要的数据:
#### 格式 JSON(POST)
```json
{
"header": {
"code": "${ROOT.Info.Code}",
"date": "${ROOT.Info.Time}"
},
"body": {
"orderCode": "${ROOT.XXX.Order.OrderCode}"
}
}
```
#### 格式 FORM(POST)
```
code=${ROOT.Info.Code}
date=${ROOT.Info.Time}
orderCode=${ROOT.XXX.Order.OrderCode}
```
#### 格式 QUERY(GET)
```
code=${ROOT.Info.Code}&date=${ROOT.Info.Time}&orderCode=${ROOT.XXX.Order.OrderCode}
```
#### 格式 XML(POST)
```xml
${ROOT.Info.Code}
${ROOT.Info.Time}
${ROOT.XXX.Order.OrderCode}
```