{{i18nTranslate('_layout.t11')}} {{i18nGetLang()==='zh' ? 'EN' : '中文'}}

# 自定义HTTP DNS

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

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

## 校验请求

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

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

当接收到请求时，通常我们需要校验：

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

## 请求发送方式

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

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

返回的内容除了默认线路动作（DefaultRoute）外，通常都是JSON格式。

## 需要处理的动作

### 获取域名列表

请求：

    // 不传递任何参数
    {

    }

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

期望返回：

    ["域名1", "域名2", ...]

其中：

- `域名` - 指的是顶级域名，比如`example.com`、`goedge.cloud`等

### 获取域名解析记录列表 - 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` - 记录名，不包括域名部分，比如 `www`、`cdn` 等，可能为空
- `type` - 记录类型，大写的记录类型，比如 `A`、`AAAA`、`CNAME`、`TXT`等
- `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` - 记录名，不包括域名部分，比如 `www`、`cdn` 等，可能为空
- `recordType` - 记录类型，大写的记录类型，比如 `A`、`AAAA`、`CNAME`、`TXT`等

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

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

其中：

- `id` - 记录的原始ID，即在你使用的DNS系统中记录的ID，是一个字符串，可以为空字符串
- `name` - 记录名，不包括域名部分，比如 `www`、`cdn` 等，可能为空
- `type` - 记录类型，大写的记录类型，比如 `A`、`AAAA`、`CNAME`、`TXT`等
- `value` - 记录值，比如A记录的记录值通常是一个IP
- `route` - 线路代号，在你使用的DNS系统中的线路代号，是一个字符串，可以为空
- `ttl` - 记录在DNS中的刷新时间（也叫存活时间），是一个数字（注意：千万不能填写一个字符串类型的值），可以填写为0

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

### 查询多个记录 - QueryRecords

请求：

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

其中：

- `domain` - 是CDN集群的主域名，类似于 `example.com`，通常只支持一级域名
- `name` - 记录名，不包括域名部分，比如 `www`、`cdn` 等，可能为空
- `recordType` - 记录类型，大写的记录类型，比如 `A`、`AAAA`、`CNAME`、`TXT`等

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

    [
    	{
    	  "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` - 记录名，不包括域名部分，比如 `www`、`cdn` 等，可能为空
- `type` - 记录类型，大写的记录类型，比如 `A`、`AAAA`、`CNAME`、`TXT`等
- `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` - 记录名，不包括域名部分，比如 `www`、`cdn` 等，可能为空
  - `type` - 记录类型，大写的记录类型，比如 `A`、`AAAA`、`CNAME`、`TXT`等
  - `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` - 记录名，不包括域名部分，比如 `www`、`cdn` 等，可能为空
  - `type` - 记录类型，大写的记录类型，比如 `A`、`AAAA`、`CNAME`、`TXT`等
  - `value` - 记录值，比如A记录的记录值通常是一个IP
  - `route` - 线路代号，在你使用的DNS系统中的线路代号，是一个字符串，可以为空
  - `ttl` - 记录在DNS中的刷新时间（也叫存活时间），是一个数字（注意：千万不能填写一个字符串类型的值），可以填写为0
- `newRecord` - 新记录相关信息
  - `id` - 记录的原始ID，即在你使用的DNS系统中记录的ID，是一个字符串，可以为空字符串
  - `name` - 记录名，不包括域名部分，比如 `www`、`cdn` 等，可能为空
  - `type` - 记录类型，大写的记录类型，比如 `A`、`AAAA`、`CNAME`、`TXT`等
  - `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` - 记录名，不包括域名部分，比如 `www`、`cdn` 等，可能为空
  - `type` - 记录类型，大写的记录类型，比如 `A`、`AAAA`、`CNAME`、`TXT`等
  - `value` - 记录值，比如A记录的记录值通常是一个IP
  - `route` - 线路代号，在你使用的DNS系统中的线路代号，是一个字符串，可以为空
  - `ttl` - 记录在DNS中的刷新时间（也叫存活时间），是一个数字（注意：千万不能填写一个字符串类型的值），可以填写为0

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

### 默认线路 - DefaultRoute

请求：

    {
      "action": "DefaultRoute"
    }

期望返回：

    线路代号

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

{{i18nTranslate('_layout.t27')}}
{{i18nTranslate('_layout.t12')}}