BLOG

将来の夢はおもしろお兄さんです。

Gehirn DNS API 仕様

追記

ゲヒルン株式会社として公式に Gehirn DNS を含む Gehirn Web Services API Documentation を公開したので、今後はそちらを参照して下さい。 今後、この非公式ドキュメントはメンテナンスしません。

はじめに

このドキュメントは、ゲヒルン株式会社が Public Preview で提供している Gehirn DNS の API 仕様を説明するものです。 ただし、これはゲヒルン株式会社として提供する公式なドキュメントではなく、あくまでも個人として、公式のドキュメントが公開されるまでの期間、暫定的に公開するものです。

また、ここで説明する仕様は、2015年12月21日17時に予定しているメンテナンスが終了した後に有効となります。

API 仕様

Root endpoint
https://api.gis.gehirn.jp/dns/v1
Content-Type
application/json
Authentication
API キーを用いた Basic 認証

認証

すべてのリクエストで認証が必要となります。 認証様式は、 API キーのトークンを usreid 、シークレットセールを password とする Basic 認証です。

API キーはコントロールパネルから発行することができます。 また、リクエストに用いる API キーには適切な権限が設定されている必要があります。

Gehirn DNS の操作で必要になる権限は [DNS] -> [全般管理] -> [ゾーン] と [DNS] -> [ドメイン] -> [操作対象のゾーン] で、それぞれ読み取り以上が必要です。 読み取りは HTTP Verb の GET に、フルアクセスは HTTP Verb の GET に加え、 POST 、 PUT 、そして DELETE に対応します。

リクエスト

API を用いて行える操作は以下に示すとおりです。 行いたい操作に合わせて、 Root endpoint と当該 Path からなるエンドポイントに対して、当該 HTTP Verb を用いたリクエストを行って下さい。

リクエストボディが必要な場合は、当該 JSON Schema に適合する形式の JSON を送信して下さい。 なお、この場合 Content-Type: application/json リクエストヘッダーが必要となります。

ゾーン

JSON Schema

{
  "type": "object",
  "properties": {
    "id": {
      "minLength": 36,
      "type": "string",
      "maxLength": 36
    },
    "name": {
      "minLength": 4,
      "type": "string",
      "maxLength": 256
    },
    "current_version_id": {
      "minLength": 36,
      "type": "string",
      "maxLength": 36
    },
    "current_version": {
      "type": "object",
      "properties": {
        "id": {
          "minLength": 36,
          "type": "string",
          "maxLength": 36
        },
        "name": {
          "minLength": 1,
          "type": "string",
          "maxLength": 255
        }
      }
    }
  }
}
フィールド 意味 リクエスト時要否
id ゾーンを特定する一意な ID 不要
name ドメイン名 必要
current_version_id 現在アクティブなバージョンの ID 不要
current_version 現在アクティブなバージョン 不要

ゾーンの作成

Path
/zones
HTTP Verb
POST
Request Body
必要

リクエスト例

POST /dns/v1/zones HTTP/1.1
Host: api.gis.gehirn.jp
Content-Type: application/json
Authorization: Basic dG9rZW46c2VjcmV0

{
    "name": "yaml.jp"
}

レスポンス例

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 18 Dec 2015 10:41:01 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 388

{
  "id": "92e52aab-81ac-4c87-b659-b7b36e05cb7f",
  "name": "yaml.jp",
  "current_version_id": "234b6f0e-8b64-4cd9-8647-16cd26133266",
  "current_version": {
    "id": "234b6f0e-8b64-4cd9-8647-16cd26133266",
    "editable": true,
    "name": "\u6700\u521d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3",
    "created_at": "2015-03-05T10:49:04Z",
    "last_modified_at": "2015-03-05T10:49:04Z"
  }
}

ゾーンのリストの取得

Path
/zones
HTTP Verb
GET
Request Body
不要

ゾーンの取得

Path
/zones/:zone_id
HTTP Verb
GET
Request Body
不要

ゾーンの削除

Path
/zones/:zone_id
HTTP Verb
DELETE
Request Body
不要

バージョン

JSON Schema

{
  "type": "object",
  "properties": {
    "id": {
      "minLength": 36,
      "type": "string",
      "maxLength": 36
    },
    "name": {
      "minLength": 1,
      "type": "string",
      "maxLength": 255
    }
  }
}
フィールド 意味 リクエスト時要否
id バージョンを特定する一意な ID 不要
name 任意のバージョン名 必要
editable 編集可否 不要
created_at バージョン作成時刻 不要
last_modified_at バージョン最終更新時刻 不要

バージョンの作成

Path
/zones/:zone_id/versions
HTTP Verb
POST
Request Body
必要

リクエスト例

POST /dns/v1/zones/234b6f0e-8b64-4cd9-8647-16cd26133266/versions HTTP/1.1
Host: api.gis.gehirn.jp
Content-Type: application/json
Authorization: Basic dG9rZW46c2VjcmV0

{
    "name": "新しいバージョン"
}

レスポンス例

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 18 Dec 2015 10:41:01 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 218

{
  "id": "f66504b0-bb65-4766-9d7c-18c4e8406071",
  "editable": true,
  "name": "\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3",
  "created_at": "2015-12-18T10:49:13Z",
  "last_modified_at": "2015-12-18T10:49:13Z"
}

バージョンリストの取得

Path
/zones/:zone_id/versions
HTTP Verb
GET
Request Body
不要

バージョンの取得

Path
/zones/:zone_id/versions/:version_id
HTTP Verb
GET
Request Body
不要

バージョンの編集

Path
/zones/:zone_id/versions/:version_id
HTTP Verb
PUT
Request Body
必要

バージョンの削除

Path
/zones/:zone_id/versions/:version_id
HTTP Verb
DELETE
Request Body
不要

レコードセット

JSON Schema

{
  "type": "object",
  "properties": {
    "id": {
      "minLength": 36,
      "type": "string",
      "maxLength": 36
    },
    "name": {
      "minLength": 1,
      "type": "string",
      "maxLength": 256
    },
    "type": {
      "minLength": 1,
      "type": "string",
      "maxLength": 5
    },
    "enable_alias": {
      "type": "boolean"
    },
    "alias_to": {
      "minLength": 1,
      "type": "string",
      "maxLength": 256
    },
    "ttl": {
      "minimum": 30,
      "type": "integer",
      "maximum": 2147483647
    },
    "records": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "properties": {
          "prio": {
            "minimum": 0,
            "type": "integer",
            "maximum": 32767
          },

          "address": {
            "minLength": 3,
            "type": "string",
            "maxLength": 39
          },

          "cname": {
            "minLength": 1,
            "type": "string",
            "maxLength": 256
          },

          "exchange": {
            "minLength": 1,
            "type": "string",
            "maxLength": 256
          },

          "nsdname": {
            "minLength": 1,
            "type": "string",
            "maxLength": 256
          },

          "target": {
            "minLength": 1,
            "type": "string",
            "maxLength": 256
          },
          "port": {
            "minimum": 0,
            "type": "integer",
            "maximum": 65535
          },
          "weight": {
            "minimum": 0,
            "type": "integer",
            "maximum": 65535
          },

          "data": {
            "minLength": 1,
            "type": "string",
            "maxLength": 64000
          }
        }
      }
    }
  }
}
フィールド 意味 リクエスト時要否
id レコードセットを特定する一意な ID 不要
name ホストネーム 必要
type レコードタイプ (A, AAAA, CNAME, MX, NS, SRV, TXT) 必要
enable_alias エイリアス機能利用 必要
alias_to エイリアス先 (エイリアス機能利用時) enable_alias が true の時のみ
ttl TTL enable_alias が false の時のみ
records レコードのリスト enable_alias が false の時のみ
records.prio Priority type が MX または SRV の時のみ
records.address IPv4 または IPv6 アドレス type が A または AAAA の時のみ
records.cname CNAME type が CNAME の時のみ
records.exchange メールサーバーのドメインネーム type が MX の時のみ
records.nsdname ネームサーバーのドメインネーム type が NS の時のみ
records.target ターゲットのドメインネーム type が SRV の時のみ
records.port ターゲットのポート番号 type が SRV の時のみ
records.weight ターゲットの重み type が SRV の時のみ
records.data TXT データ type が TXT の時のみ

レコードセットの作成

Path
/zones/:zone_id/versions/:version_id/records
HTTP Verb
POST
Request Body
必要

リクエスト例

POST /dns/v1/zones/234b6f0e-8b64-4cd9-8647-16cd26133266/versions/f66504b0-bb65-4766-9d7c-18c4e8406071/records HTTP/1.1
Host: api.gis.gehirn.jp
Content-Type: application/json
Authorization: Basic dG9rZW46c2VjcmV0

{
  "name": "yaml.jp.",
  "ttl": 300,
  "type": "A",
  "enable_alias": false,
  "records": [
    {
      "address":"192.0.2.10"
    },
    {
      "address":"192.0.2.11"
    }
  ]
}

レスポンス例

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 18 Dec 2015 10:41:01 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 218

{
  "id": "e590d62a-3676-4b08-832a-a1fdd6dfefdf",
  "name": "yaml.jp.",
  "type": "A",
  "enable_alias": false,
  "ttl": 300,
  "records": [
    {
      "address": "192.0.2.10"
    },
    {
      "address": "192.0.2.11"
    }
  ]
}

レコードセットリストの取得

Path
/zones/:zone_id/versions/:version_id/records
HTTP Verb
GET
Request Body
不要

レコードセットの取得

Path
/zones/:zone_id/versions/:version_id/records/:record_id
HTTP Verb
GET
Request Body
不要

レコードセットの編集

Path
/zones/:zone_id/versions/:version_id/records/:record_id
HTTP Verb
PUT
Request Body
必要

レコードセットの削除

Path
/zones/:zone_id/versions/:version_id/records/:record_id
HTTP Verb
DELETE
Request Body
不要