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 服务列表
- ACMEProviderAccountService — ACME服务商账号
- ACMEProviderService — ACME服务商
- ACMETaskService — ACME任务相关服务
- ACMEUserService — ACME用户相关服务
- ADNetworkService — 高防线路服务
- ADPackageInstanceService — 高防实例服务
- ADPackagePeriodService — 高防实例有效期服务
- ADPackagePriceService — 高防产品价格服务
- ADPackageService — 高防产品服务
- APIMethodStatService — API方法统计服务
- APINodeService — API节点服务
- AdminService — 管理员服务
- ClientAgentIPService — Agent IP服务
- ClientAgentService — Agent服务
- DBNodeService — 数据库节点服务
- DBService — 数据库相关服务
- DNSDomainService — DNS域名相关
- DNSProviderService — DNS服务商相关服务
- DNSService — 域名解析服务
- DNSTaskService — DNS同步相关任务
- FileChunkService — 文件片段相关服务
- FileService — 文件相关服务
- FirewallService — 防火墙全局服务
- FormalClientBrowserService — 浏览器信息库服务
- FormalClientSystemService — 操作系统信息库服务
- HTTPAccessLogPolicyService — 访问日志策略服务
- HTTPAccessLogService — 访问日志相关服务
- HTTPAuthPolicyService — 服务认证策略服务
- HTTPCachePolicyService — 缓存策略服务
- HTTPCacheTaskKeyService — 缓存任务Key管理
- HTTPCacheTaskService — 缓存任务管理
- HTTPFastcgiService — Fastcgi服务
- HTTPFirewallPolicyService — HTTP防火墙(WAF)服务
- HTTPFirewallRuleGroupService — WAF分组服务
- HTTPFirewallRuleSetService — WAF规则集服务
- HTTPHeaderPolicyService — HTTP Header策略服务
- HTTPHeaderService — HTTP Header管理服务
- HTTPLocationService — 路由规则服务
- HTTPPageService — 自定义页面服务
- HTTPRewriteRuleService — 重写规则服务
- HTTPWebService — HTTP Web相关管理服务
- HTTPWebsocketService — HTTP Websocket管理服务
- IPItemService — IP条目管理
- IPLibraryArtifactService — IP库制品
- IPLibraryFileService — IP库文件管理
- IPLibraryService — IP库
- IPListService — IP列表
- LatestItemService — 最近使用的条目服务
- LogService — 审计日志服务
- LoginService — 认证相关服务
- LoginSessionService — 登录SESSION服务
- LoginTicketService — 登录票据相关服务
- MessageMediaInstanceService — 消息媒介实例
- MessageMediaService — 消息媒介管理
- MessageReceiverService — 消息对象接收者设置
- MessageRecipientGroupService — 消息接收人分组
- MessageRecipientService — 消息接收人
- MessageService — 消息相关服务
- MessageTaskLogService — 消息发送任务日志
- MessageTaskService — 消息发送任务服务
- MetricChartService — 指标图表相关服务
- MetricItemService — 指标相关服务
- MetricStatService — 指标统计数据相关服务
- NSAccessLogService — 访问日志相关服务
- NSClusterService — 域名服务集群相关服务
- NSDomainGroupService — 域名分组服务
- NSDomainService — 域名相关服务
- NSKeyService — NS密钥相关服务
- NSNodeService — 域名服务器节点服务
- NSPlanService — DNS套餐服务
- NSQuestionOptionService — DNS查询选项
- NSRecordHourlyStatService — NS记录小时统计
- NSRecordService — 域名记录相关服务
- NSRouteCategoryService — 线路分类服务
- NSRouteService — 线路相关服务
- NSService — 域名服务
- NSUserPlanService — 用户DNS套餐服务
- NodeActionService — 节点动作服务
- NodeClusterFirewallActionService — 防火墙动作服务
- NodeClusterMetricItemService — 集群指标
- NodeClusterService — 边缘节点集群管理服务
- NodeGrantService — 节点认证信息管理服务
- NodeGroupService — 节点分组服务
- NodeIPAddressLogService — IP地址相关日志
- NodeIPAddressService — 节点IP地址服务
- NodeIPAddressThresholdService — IP阈值相关服务
- NodeLogService — 节点日志相关服务
- NodeLoginService — 节点登录相关
- NodePriceItemService — 节点区域定价相关服务
- NodeRegionService — 节点区域相关服务
- NodeService — 边缘节点管理服务
- NodeTaskService — 节点同步任务相关服务
- NodeThresholdService — 节点阈值服务
- NodeValueService — 节点指标数据服务
- OrderMethodService — 订单支付方式相关服务
- OriginService — 源站管理服务
- PagesService — Pages相关服务
- PagesStorageService — PagesStorage相关服务
- PlanService — 套餐相关服务
- PostCategoryService — 文章分类管理服务
- PostService — 文章管理服务
- PriceService — 价格相关服务
- RegionCityService — 城市相关服务
- RegionCountryService — 国家/地区相关服务
- RegionProviderService — ISP相关服务
- RegionProvinceService — 省份相关服务
- RegionTownService — 区县相关服务
- ReportNodeGroupService — 监控节点分组
- ReportNodeService — 监控终端服务
- ReportResultService — 区域监控报告结果
- ReverseProxyService — 反向代理管理服务
- SMSSenderService — 短信发送服务
- SSLCertService — SSL证书管理服务
- SSLPolicyService — SSL/TLS策略管理服务
- ScriptService — 脚本相关服务
- ServerBandwidthStatService — 服务带宽统计服务
- ServerBillService — 服务账单相关服务
- ServerClientBrowserMonthlyStatService — 浏览器统计
- ServerClientSystemMonthlyStatService — 操作系统统计
- ServerDailyStatService — 服务统计相关服务
- ServerDomainHourlyStatService — 服务域名按小时统计服务
- ServerGroupService — 服务分组服务
- ServerHTTPFirewallDailyStatService — WAF统计
- ServerRegionCityMonthlyStatService — 城市月份统计
- ServerRegionCountryMonthlyStatService — 地区月份统计
- ServerRegionProviderMonthlyStatService — 运营商月份统计
- ServerRegionProvinceMonthlyStatService — 省份月份统计
- ServerService — 网站服务相关服务
- ServerStatBoardChartService — 统计看板条目
- ServerStatBoardService — 统计看板
- SysLockerService — 互斥锁管理
- SysSettingService — 系统设置管理服务
- TrafficDailyStatService — 按日统计服务
- TrafficPackagePeriodService — 流量包有效期服务
- TrafficPackagePriceService — 流量包价格服务
- TrafficPackageService — 流量包服务
- UserADInstanceService — 用户高防实例服务
- UserAccessKeyService — 用户AccessKey相关服务
- UserAccountDailyStatService — 用户账户统计服务
- UserAccountLogService — 用户账户日志服务
- UserAccountService — 用户账户服务
- UserBillService — 账单相关服务
- UserIdentityService — 用户实名认证服务
- UserNodeService — 用户节点管理服务
- UserOrderService — 用户订单相关服务
- UserPlanService — 用户购买的套餐管理服务
- UserScriptService — 用户脚本服务
- UserService — 用户相关服务
- UserTicketCategoryService — 工单分类服务
- UserTicketLogService — 工单日志服务
- UserTicketService — 工单服务
- UserTrafficBillService — 用户流量带宽子账单服务
- UserTrafficPackageService — 用户流量包服务