Files
pyGoEdge-UserPanel/reference/goedge 文档
2025-11-18 03:36:49 +08:00
..
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00
2025-11-18 03:36:49 +08:00

GoEdge API 文档

协议说明

理解proto3协议 服务和方法 以 Service 结尾的API成为服务比如 ServerService每个服务下有很多方法比如

createServer updateServerBasic updateServerGroupIds 在通过HTTP协议调用API时你需要组合服务和方法作为方法的地址 API接口地址/服务名/方法名 比如: http://192.168.2.100/ServerService/createServer 接口参数解读 假设我们看到以下的接口参数定义:

// 创建服务 { int64 userId; int64 adminId; string type; string name; string description; // 配置相关 bytes serverNamesJSON; bytes httpJSON; bytes httpsJSON; bytes tcpJSON; bytes tlsJSON; bytes unixJSON; bytes udpJSON; int64 webId; bytes reverseProxyJSON; []int64 serverGroupIds; int64 userPlanId; } 其中:

每个字段定义都至少由两部分组成,最简单的定义为 字段类型 字段名,这里我们省略了字段编号; int64和 string 等都是字段数据类型,目前支持以下常用的数据类型: int64 - 64位整型 int32 - 32位整型 uint64 - 无符号的64位整型 uint32 - 无符号的32位整型 double - 双精度浮点数字 float - 单精度浮点数字 string - 字符串 bool - 布尔值在JSON中为 true 或者 false bytes - 二进制字节数组通过JSON调用时你需要先将数据转换为Base64格式再传递到接口比如 一个字符串的内容为Hello, World那么传递到 bytes 类型字段的时候就需要传递 base64_encode('Hello, World'),最终值应该为 SGVsbG8sIFdvcmxk 一个JSON数据的内容为{ "name": "goedge.cloud", "type": "domain"},那么传递到 bytes 类型字段的时候就需要传递 base64_encode('{ "name": "goedge.cloud", "type": "domain"}'),最终值应该为 eyAibmFtZSI6ICJnb2VkZ2UuY24iLCAidHlwZSI6ICJkb21haW4ifQ== 一个文件内容的二进制内容同样也需要Base64编码处理 反之对于接口返回的响应数据来说你需要Base64 Decode处理才能得到原始数据 []字段类型 字段名 表示一个数组,字段类型 部分表示字段值数组中的元素的类型,比如: []int64 serverGroupIds 表示 serverGroupIds 是一个数组通过JSON调用时需要传递[ 1, 2, 3 ]这样格式的数据,其中 int64 规定了数组中的每一项必须是一个整型; []string types 表示 types 的值为 [ "type1", "type2" ] 这样的数组 []ServerGroup serverGroups 表示 serverGroups 的只为 [ serverGroup1, serverGroup2, serverGroup3 ] 这样的数组因为ServerGroup也是一个对象所以我们可以展开来最终的JSON为[ { "id":1, "name": "分组1" }, { "id":2, "name": "分组2" }, { "id":3, "name": "分组3" } ] 整体转换为JSON 通过JSON调用API时需要将proto3协议的数据转换为JSON。对于这个示例中和JSON的对应关系为

{ "userId": 35, "adminId": 1, "type": "httpProxy", "name": "My site", "description": "This is my site", "serverNamesJSON": "ewogICJuYW1lIjogImdvZWRnZS5jbiIKfQ==", "httpJSON": "...", "httpsJSON": "...", "tcpJSON": "...", "tlsJSON": "...", "unixJSON": "...", "udpJSON": "...", "webId": "...", "reverseProxyJSON": "...", "serverGroupIds": [1, 3, 5], "userPlanId": 12 } 嵌套 JSON数据也支持嵌套

{ "name": "Site", "addr": { "protocol": "http", "host": "example.com", "portRange": "80" } } 空参数 有些接口参数定义为:

{ } 像这样的接口需要传递的JSON为 {} 即可。 字符集 GoEdge所有API都只支持UTF-8。

API调用概述 接口地址 如果你还没有HTTP接口地址可以先在API节点中添加一个请参考 API节点设置。

注意这里说的HTTP接口地址不是GRPC地址也不是管理系统地址。

如果想调用某个具体的方法,那么地址就是:

API接口地址/服务名/方法名 比如: http://192.168.2.100/ServerService/createServer 调用方法 除了 /APIAccessTokenService/getAPIAccessToken 接口外,其他的所有接口都需要:

在HTTP Header中传递X-Edge-Access-Token令牌数据以便于我们认证用户是否有接口访问的权限此令牌通过 /APIAccessTokenService/getAPIAccessToken 接口获取,具体请参考 认证 一节。 所有请求数据需要以 POST 方法上传一个完整的JSON数据接口响应数据也是JSON数据 比如:

POST /HTTPAccessLogService/listHTTPAccessLogs ... X-Edge-Access-Token: n8adDybtPCAGdbORkXjfpJgL28EGkOLz ... { "serverId": 23, "day": "20210101", "size": 100, "reverse": true } 可以在这里查看令牌获取方法。

CURL示例 curl -v -XPOST -H"X-Edge-Access-Token: hZFW3yg1geeKYqLPjhmi5OyAtYoKingiNoemNkqjLWIsCXJcmaHDaUL1ELX6vtPrjvwiXiTuBN9mAVK8cUhn6PpuN1eLYbtN1seAFMpf2h6aZtFgkhAxI3cYUSZIwLQg" "http://192.168.1.6:8004/HTTPAccessLogService/listHTTPAccessLogs" -d '{ "size":100, "day":"20211217" }' 你需要把IP地址、X-Edge-Access-Token换成你自己的。 格式化输出 可以在HTTP Header中增加 X-Edge-Response-Pretty: on 来让输出的JSON更加可读。

HTTP状态码 调用API后一定 要检查API响应的HTTP状态码注意是HTTP状态码不是JSON里面的code只有200才是响应成功以下是常见的几种响应状态码错误

400 - 错误的请求格式可能是发送的内容过大、或JSON数据格式错误 404 - API服务或方法不存在或错误的API路径 常见问题 调用API的时候提示 Received HTTP/0.9 when not allowed 是怎么回事? 答你没有按照本文开头部分所说的添加HTTP接口地址请 点击这里 添加HTTP接口地址后再重试。

API认证 在调用API时需要通过令牌AccessToken对用户权限进行认证。

步骤1创建AccessKey AccessKey分为两种一种是是用户AccessKey可以用来管理跟此用户相关的数据另外一种是管理员API可以管理所有管理员能操作的数据。

用户AccessKey 从v0.2.1开始如果你还没有用户AccessKey则需要在”平台用户” 用户”详情” “API AccessKey”中创建。

商业版的用户可以自行在用户平台”访问控制”页面中点击”创建AccessKey”然后创建一个AccessKey。

管理员AccessKey 从v0.2.3开始如果你还没有管理员AccessKey则需要在”系统用户” 用户”详情” “API AccessKey”中创建。

步骤2调用API获取AccessToken 接口地址 /APIAccessTokenService/getAPIAccessToken 请求方法 POST。

请求参数 { "type": "admin", "accessKeyId": "zr9cmR42AEZxRyIV", "accessKey": "2w5p5NSZZuplUPsfPMzM7dFmTrI7xyja" } 其中 type - 如果是用户即平台用户AccessKey则值为 user如果是管理员即系统用户AccessKey则值为 admin accessKeyId 和 accessKey 换成你在步骤1中创建的AccessKey对应的数据。 响应结果 { "code": 200, "data": { "token": "IKNSMufZ1vDiXp5rSd9QR01m1174Oum5sah4amWFgbRb7lOKjuk62Spl7hgcazctzGhGG7jPgfmYUPojulC0FK5cLbrj8n7kxW7BtSawH9gWW14IWOzBY6UcpyXQndFu", "expiresAt": 1609686945 }, "message": "ok" } 其中: code - 如果是 200 表示成功,否则表示失败 token - 就是AccessToken可以在别的接口中通过HTTP Header X-Edge-Access-Token 传入; expiresAt - 过期时间戳默认为N个小时过期后请及时重新获取。 多次调用此接口会导致先前获取的AccessToken失效。

CURL示例 对管理员来说可以使用curl命令调用接口获得Token

curl -XPOST "http://192.168.1.6:8004/APIAccessTokenService/getAPIAccessToken" -d '{ "type":"admin", "accessKeyId":"zr9cmR42AEZxRyIV", "accessKey":"2w5p5NSZZuplUPsfPMzM7dFmTrI7xyja" }' 你需要把API地址、accessKeyId、accessKey换成你自己的。 对平台用户来说可以使用curl命令调用接口获得Token

curl -XPOST "http://192.168.1.6:8004/APIAccessTokenService/getAPIAccessToken" -d '{ "type":"user", "accessKeyId":"JOvsyXIFqkQbh5kl", "accessKey":"t0RY8YO3R58VbJJNp0RqKw9KWNpObwtE" }' 你需要把API地址、accessKeyId、accessKey换成你自己的。 步骤3调用API 在 API列表 找到要调用的API然后以POST方式调用 /服务/方法 组合后的URL在Header中加入 X-Edge-Access-Token 值为步骤2中的生成的AccessToken接口具体可以参考 API调用概述 。

API 服务列表