https://github.com/lockgit/xhttp
Http schedule flow 🚀
https://github.com/lockgit/xhttp
flow http schedule xhttp
Last synced: 12 days ago
JSON representation
Http schedule flow 🚀
- Host: GitHub
- URL: https://github.com/lockgit/xhttp
- Owner: LockGit
- Created: 2022-11-07T15:34:30.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2022-11-19T05:19:24.000Z (over 2 years ago)
- Last Synced: 2025-03-05T14:48:43.598Z (4 months ago)
- Topics: flow, http, schedule, xhttp
- Language: Go
- Homepage:
- Size: 2.41 MB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
### xhttp
### what is xhttp ?
xhttp ---> 将一个或者多个 http api 按照自定义的编排配置方式,进行并行或串行聚合后并将结果返回
场景:
* 将后端的多个API聚合处理,只暴漏一个API给到前端
* 自动化测试验证
* ....### 配置定义
storage/demo下的文件夹表示项目名,每个项目下的routes.json为要编排的路由
| 字段 | 类型 | 说明 |
|-------------------------------------|--------|--------------------------------------------------|
| url | string | 匹配url,指定值或/path/:id占位符或/path/some*通配符形式均可 |
| method | string | 当前项目url所支持的http请求 |
| execType | string | parallel=并行,serial=串行 |
| children | array | 待编排的子api |
| children[x].name | string | 子api的别名 |
| children[x].url | string | 子api的url |
| children[x].method | string | 子api的请求方式 |
| children[x].params | array | 子api的请求参数 |
| children[x].params[x].name | string | 子api的请求参数名 |
| children[x].params[x].source | string | 子api的请求参数取值来源 |
| children[x].params[x].default_value | string | 子api的请求参数默认值 |
| children[x].params[x].required | string | 子api的请求参数是否必填 |其中取值来源children[x].params[x].source 支持有以下:
| 字段 | 类型 | 说明 |
|------------|--------|-------------------------------------|
| $.query | string | 从http query中获取参数 |
| $.body | string | 从http body中获取参数 |
| $.header | string | 从http header中获取参数 |
| $.cookie | string | 从http cookie中获取参数 |
| $.someName | string | 从name=someName api结果中获取参数(仅并行聚合时生效) |### demo
```bash
go run main.gocurl -XPOST http://127.0.0.1:8888/test?prod=env&from=pc&json=1 -H 'X-Project:hello'
X-Project的值即为项目名,上面curl请求表示当前请求发到那个hello项目
```服务接收到请求后,会匹配/test路由,/test下有2个子路由:
* 表示对children中的两个url(name=aaa,name=bbb)进行parallel(并行)聚合操作。
* 以children解释说明: 两个children中的url都配置了: https://www.baidu.com/sugrec
* 第2个children的get请求的参数有如下:
* prod(从query中取值)
* from(从header中取值)
* name(从body中取值)
* age(从cookie中取值)
* other(从$.aaa【前一个name=aaa的api结果中取值】,仅在串行聚合中生效)```json
{
"url": "/test",
"method": "post",
"execType": "parallel",
"children": [
{
"name": "aaa",
"url": "https://www.baidu.com/sugrec",
"method": "get",
"params": [
{
"name": "prod",
"source": "$.query",
"default_value": "pc_his",
"required": true
},
{
"name": "from",
"source": "$.header",
"default_value": "pc",
"required": true
},
{
"name": "name",
"source": "$.body",
"default_value": "1",
"required": true
},
{
"name": "age",
"source": "$.cookie",
"default_value": "1",
"required": true
}
],
"timeout": 3
},
{
"name": "bbb",
"url": "https://www.baidu.com/sugrec",
"method": "get",
"params": [
{
"name": "prod",
"source": "$.query",
"default_value": "pc_his",
"required": true
},
{
"name": "from",
"source": "$.query",
"default_value": "pc",
"required": true
},
{
"name": "name",
"source": "$.query",
"default_value": "1",
"required": true
},
{
"name": "age",
"source": "$.cookie",
"default_value": "1",
"required": true
},
{
"name": "other",
"source": "$.aaa",
"default_value": "test",
"required": true
}
],
"timeout": 3
}
]
}
``````bash
curl -XPOST http://127.0.0.1:8888/demo -H 'X-Project:hello'
``````json
{
"aaa": "{\"err_no\":0,\"errmsg\":\"\",\"queryid\":\"0x4a72d4bbf5c4bd\"}",
"bbb": "{\"err_no\":0,\"errmsg\":\"\",\"queryid\":\"0x1acd194c0f99b0\"}"
}
```### 注意
* children[x].url 的配置应该是确定的,否则可能会触发ssrf
* 用go写的速成项目,验证猜想, xhttp 还未经过大量的验证和实践