通过graphql mesh 暴露HAProxy Data Plane API graphql api
graphql mesh是一个很不错的graphql 框架,提供了多种数据的统一访问,以下是通过graphql mesh 暴露HAProxy Data Plane API为graphql api,以前有写过一个使用swagger-to-graphql 转换的,
环境准备
- node 环境
├── README.md
├ .meshrc.yaml
├── docker-compose
│ ├── Dockerfile
│ ├── docker-compose.yaml
│ ├── haproxy.cfg
│ └── prometheus.yml
├── haproxy-api.json
├── package.json
└── yarn.lock
- 说明
docker-compose 为基于 docker-compose 的本地运行环境,可以方便本地测试,具体的配置参考源码
haproxy-api.json 为swagger api 指南,可以通过api 请求获取
package.json 主要是依赖以及npm script 定义
{
"dependencies": {
"@graphql-mesh/cli": "^0.1.17",
"@graphql-mesh/openapi": "^0.1.17",
"@graphql-mesh/runtime": "^0.1.17",
"graphql": "^15.0.0"
},
"scripts": {
"start": "graphql-mesh serve"
}
}
.meshrc.yaml 定义配置,主要是关于swagger api 的
sources:
- name: haproxy
handler:
openapi:
source: ./haproxy-api.json
注意因为默认haproxy 是有安全控制的,我们可以通过basic auth 解决,格式为:http://<username>:<password>@<host>:<port>/vX
启动&&效果
- 启动
yarn start
- 效果
操作流程
可以参考官方文档,或者以前写的一些文档
- 流程
1. 获取api地址(目前包含了v1,v2,推荐使用v2),比如 /v1/specification,/v2/specification
2. 代码生成(可以通过restapi,可选)
3. 获取配置版本,通过/vX/services/haproxy/transactions 或者官方介绍的一个/vX/services/haproxy/configuration/frontends
4. 创建一个事物(一次提交操作) /vX/services/haproxy/transactions?version=<version> post 请求
5. 创建一个backend /vX/services/haproxy/configuration/backends?transaction_id=<transid> post 请求
6. 添加server /vX/services/haproxy/configuration/servers?backend=<backendname>&transaction_id=<transid> post 请求
7. 创建frontend /vX/services/haproxy/configuration/frontends?transaction_id=<transid> post 请求
8. 添加bind /vX/services/haproxy/configuration/binds?frontend=<frontend>&transaction_id=<trandis> post 请求
9. 提交事物 /vX/services/haproxy/transactions/<transid> post 请求
说明
graphql mesh 是一个很不错的框架,可以加速我们的数据集成以及访问