自定义HTTP DNS

在”域名解析”–“DNS服务商”中,可以添加自定义HTTP DNS。添加并在集群中使用后,当集群的节点、网站的DNS记录需要变更时,会自动将请求发送到这个HTTP DNS中的HTTP URL地址上:

节点|网站解析记录变更  <--> API节点 <--> 你的自定义接口(HTTP URL)

校验请求

在接收到的请求Header中,会自动设置以下三个参数:

  • Timestamp - Unix时间戳,目前是10位
  • Token - 用来校验请求的合法性,算法是 sha1("私钥@Timestamp值") 并转换为16进制的小写字符串;其中私钥值在添加DNS服务商时会自动生成;
  • User-Agent - CDN产品名称和版本

当接收到请求时,通常我们需要校验:

  1. Timestamp值是否已过期,通过时间戳对比检查时间戳是否离现在时间过长,来检查请求是否过期;前提是你的接口所在服务器时间和API节点服务器时间需要一致;
  2. 检查Token值是否合法,通过界面获取的私钥和接收到的时间戳值进行sha1运算,对比接收到的Token是否一致。

请求发送方式

所有请求均以POST方式发送,发送的内容均为JSON格式,类似于:

{
  "action": "GetRecords", 
  "domain": "example.com"
}

返回的内容除了默认线路动作(DefaultRoute)外,通常都是JSON格式。

需要处理的动作

获取域名列表

请求:

// 不传递任何参数
{
  
}

// 或者
{
  "action": "GetDomains"
}

期望返回:

["域名1", "域名2", ...]
其中:

  • 域名 - 指的是顶级域名,比如example.comflex.dd.ci

获取域名解析记录列表 - GetRecords

请求:

{
  "action": "GetRecords",
  "domain": "域名"
}
其中:

  • domain - 是CDN集群的主域名,类似于 example.com,通常只支持一级域名

期望返回:

[
  {
	"id": "记录ID 1",
	"name": "记录名",
	"type": "记录类型",
	"value": "记录值",
	"route": "线路代号",
	"ttl": "刷新时间"
  },
  {
	"id": "记录ID 2",
	...
  },
  {
    "id": "记录ID 3",
    ...
  }
]
其中:

  • id - 记录的原始ID,即在你使用的DNS系统中记录的ID,是一个字符串,可以为空字符串
  • name - 记录名,不包括域名部分,比如 wwwcdn 等,可能为空
  • type - 记录类型,大写的记录类型,比如 AAAAACNAMETXT
  • value - 记录值,比如A记录的记录值通常是一个IP
  • route - 线路代号,在你使用的DNS系统中的线路代号,是一个字符串,可以为空
  • ttl - 记录在DNS中的刷新时间(也叫存活时间),是一个数字(注意:千万不能填写一个字符串类型的值),可以填写为0

读取域名支持的线路数据 - GetRoutes

请求:

{
  "action": "GetRoutes",
  "domain": "域名"
}
其中:

  • domain - 是CDN集群的主域名,类似于 example.com,通常只支持一级域名

期望返回:

[
  {
	"name": "线路名1",
	"code": "线路代号1"
  },
  {
    "name": "线路名2",
    "code": "线路代号2"
  },
  ...
]
其中:

  • name - 线路名,用来在界面上显示线路名称
  • code - 线路代号,用来在其他动作中指定线路

如果没有任何线路,可以返回一个空数组:

[]

查询单个记录 - QueryRecord

请求:

{
  "action": "QueryRecord",
  "domain": "域名",
  "name": "记录名",
  "recordType": "记录类型"
}
其中:

  • domain - 是CDN集群的主域名,类似于 example.com,通常只支持一级域名
  • name - 记录名,不包括域名部分,比如 wwwcdn 等,可能为空
  • recordType - 记录类型,大写的记录类型,比如 AAAAACNAMETXT

期望返回: 如果找到记录则返回对应的记录信息:

{
  "id": "记录ID",
  "name": "记录名",
  "type": "记录类型",
  "value": "记录值",
  "route": "线路代号",
  "ttl": "刷新时间"
}
其中:

  • id - 记录的原始ID,即在你使用的DNS系统中记录的ID,是一个字符串,可以为空字符串
  • name - 记录名,不包括域名部分,比如 wwwcdn 等,可能为空
  • type - 记录类型,大写的记录类型,比如 AAAAACNAMETXT
  • value - 记录值,比如A记录的记录值通常是一个IP
  • route - 线路代号,在你使用的DNS系统中的线路代号,是一个字符串,可以为空
  • ttl - 记录在DNS中的刷新时间(也叫存活时间),是一个数字(注意:千万不能填写一个字符串类型的值),可以填写为0

如果没有找到此解析记录,则返回空或者null。

查询多个记录 - QueryRecords

请求:

{
  "action": "QueryRecords",
  "domain": "域名",
  "name": "记录名",
  "recordType": "记录类型"
}
其中:

  • domain - 是CDN集群的主域名,类似于 example.com,通常只支持一级域名
  • name - 记录名,不包括域名部分,比如 wwwcdn 等,可能为空
  • recordType - 记录类型,大写的记录类型,比如 AAAAACNAMETXT

期望返回: 如果找到记录则返回对应的记录信息:

[
	{
	  "id": "记录ID",
	  "name": "记录名",
	  "type": "记录类型",
	  "value": "记录值",
	  "route": "线路代号",
	  "ttl": "刷新时间"
	},
  	{
	  "id": "记录ID 2",
	  "name": "记录名 2",
	  "type": "记录类型 2",
	  "value": "记录值 2",
	  "route": "线路代号 2",
	  "ttl": "刷新时间 2"
  	} ,
    ...
]
其中:

  • id - 记录的原始ID,即在你使用的DNS系统中记录的ID,是一个字符串,可以为空字符串
  • name - 记录名,不包括域名部分,比如 wwwcdn 等,可能为空
  • type - 记录类型,大写的记录类型,比如 AAAAACNAMETXT
  • value - 记录值,比如A记录的记录值通常是一个IP
  • route - 线路代号,在你使用的DNS系统中的线路代号,是一个字符串,可以为空
  • ttl - 记录在DNS中的刷新时间(也叫存活时间),是一个数字(注意:千万不能填写一个字符串类型的值),可以填写为0

如果没有找到此解析记录,则返回空数组([])或者null。

添加记录 - AddRecord

请求:

{
  "action": "AddRecord",
  "domain": "域名",
  "newRecord": {
    "id": "记录ID",
    "name": "记录名",
    "type": "记录类型",
    "value": "记录值",
    "route": "线路代号",
    "ttl": "刷新时间"
  }
}
其中:

  • domain - 是CDN集群的主域名,类似于 example.com,通常只支持一级域名
  • newRecord - 记录相关信息
    • id - 记录的原始ID,即在你使用的DNS系统中记录的ID,是一个字符串,可以为空字符串
    • name - 记录名,不包括域名部分,比如 wwwcdn 等,可能为空
    • type - 记录类型,大写的记录类型,比如 AAAAACNAMETXT
    • value - 记录值,比如A记录的记录值通常是一个IP
    • route - 线路代号,在你使用的DNS系统中的线路代号,是一个字符串,可以为空
    • ttl - 记录在DNS中的刷新时间(也叫存活时间),是一个数字(注意:千万不能填写一个字符串类型的值),可以填写为0

期望返回: 不处理返回内容。

修改记录 - UpdateRecord

请求:

{
  "action": "UpdateRecord",
  "domain": "域名",
  "record": {
    "id": "记录ID",
    "name": "记录名",
    "type": "记录类型",
    "value": "记录值",
    "route": "线路代号",
    "ttl": "刷新时间"
  },
  "newRecord": {
    "id": "记录ID",
    "name": "记录名",
    "type": "记录类型",
    "value": "记录值",
    "route": "线路代号",
    "ttl": "刷新时间"
  }
}
其中:

  • domain - 是CDN集群的主域名,类似于 example.com,通常只支持一级域名
  • record - 老记录信息
    • id - 记录的原始ID,即在你使用的DNS系统中记录的ID,是一个字符串,可以为空字符串
    • name - 记录名,不包括域名部分,比如 wwwcdn 等,可能为空
    • type - 记录类型,大写的记录类型,比如 AAAAACNAMETXT
    • value - 记录值,比如A记录的记录值通常是一个IP
    • route - 线路代号,在你使用的DNS系统中的线路代号,是一个字符串,可以为空
    • ttl - 记录在DNS中的刷新时间(也叫存活时间),是一个数字(注意:千万不能填写一个字符串类型的值),可以填写为0
  • newRecord - 新记录相关信息
    • id - 记录的原始ID,即在你使用的DNS系统中记录的ID,是一个字符串,可以为空字符串
    • name - 记录名,不包括域名部分,比如 wwwcdn 等,可能为空
    • type - 记录类型,大写的记录类型,比如 AAAAACNAMETXT
    • value - 记录值,比如A记录的记录值通常是一个IP
    • route - 线路代号,在你使用的DNS系统中的线路代号,是一个字符串,可以为空
    • ttl - 记录在DNS中的刷新时间(也叫存活时间),是一个数字(注意:千万不能填写一个字符串类型的值),可以填写为0

期望返回: 不处理返回内容。

删除记录 - DeleteRecord

请求:

{
  "action": "DeleteRecord",
  "domain": "域名",
  "record": {
    "id": "记录ID",
    "name": "记录名",
    "type": "记录类型",
    "value": "记录值",
    "route": "线路代号",
    "ttl": "刷新时间"
  }
}
其中:

  • domain - 是CDN集群的主域名,类似于 example.com,通常只支持一级域名
  • record - 记录相关信息
    • id - 记录的原始ID,即在你使用的DNS系统中记录的ID,是一个字符串,可以为空字符串
    • name - 记录名,不包括域名部分,比如 wwwcdn 等,可能为空
    • type - 记录类型,大写的记录类型,比如 AAAAACNAMETXT
    • value - 记录值,比如A记录的记录值通常是一个IP
    • route - 线路代号,在你使用的DNS系统中的线路代号,是一个字符串,可以为空
    • ttl - 记录在DNS中的刷新时间(也叫存活时间),是一个数字(注意:千万不能填写一个字符串类型的值),可以填写为0

期望返回: 不处理返回内容。

默认线路 - DefaultRoute

请求:

{
  "action": "DefaultRoute"
}

期望返回:

线路代号

其中线路代号(注意这里不是线路名称)是一个字符串类型的内容,可以为空字符串。