開発

Gehirn DNS API

2011年12月12日

Gehirn DNS の API をベータ公開しました。

トークンの取得

はじめに、アクセストークンを取得します。トークンは Gehirn DNS のコントロールパネルにログインすると、右側のメニューにありますのですぐに分かると思います。

認証について

認証は、Basic認証で行います。Basic認証は通信が覗かれると、TokenとSecretがバレますので、HTTPS経由じゃないとAPIが応答しません。ご注意ください。

Authorizationヘッダに Basic 《 token:secret をBase64したもの》となります。

今回は実験なので、Google Chrome拡張の「REST Console」から操作したいと想います。

ドメイン(ゾーン)の一覧を取得

では、登録しているドメイン一覧を取得します。

https://dns.gehirn.jp/api/domain

にGETします。

 

上記のようにして、REST ConsoleでAuthorizationヘッダを生成すると楽です。

そうすると、JSON形式でドメインの情報と各リソースレコードの情報が返ってきます。

APIのURLに .xml 拡張子をつけるとXMLレスポンスになります。

また、ドメインを直接していすると、任意の1つのドメインをGETできます。

https://dns.gehirn.jp/api/domain/isid.ai.xml

もしくは

https://dns.gehirn.jp/api/domain/173.json

のように、Domain.Name(ドメイン名)の他にDomain.ID(ID番号)でも指定できます。拡張子がない場合、デフォルトでJSONが返ります。

返って来る内容は下記のような感じ。

この図を直接見たい人は、JSONを Online JSON Viewer に貼り付けると見られます。

 

ドメインを指定したときはこんな感じ。

配列にすると、一覧を取得した時が Domains[0].Resources.A[0] みたいなイメージ。
直接指定の時は Domain.Resources.AAAA[1].ID のような感じ。

 

ゾーンの作成

では実際にゾーンを作成していましょうー。

リクエストはXMLでもJSONでもできますが、好みで。僕はJSONでリクエストしたいと思います。

https://dns.gehirn.jp/api/domain

に対して Content-Type: application/json でPOSTします。
JSONの中身は

{
	"domain": "testdomain.com.",
	"email": "isidai@isid.ai"
}

で、 domain にドメイン名。最期にドットを忘れずに。emailは省略可能。
すると、ドメイン情報が返ってきます。

{
    "Count": 1,
    "Domain": {
        "ID": 228,
        "Name": "testdomain.com.",
        "Resources": {
            "SOA": {
                "ID": 1753,
                "Name": "testdomain.com.",
                "Type": "SOA",
                "TTL": 300,
                "MNAME": "ns1.gehirn.jp.",
                "RNAME": "isidai@isid.ai.",
                "Serial": 0,
                "Refresh": 300,
                "Retry": 900,
                "Expire": 86400,
                "NegativeCacheTTL": 300
            },
            "NS": [{
                "ID": 1754,
                "Name": "testdomain.com.",
                "Type": "NS",
                "NameServer": "ns1.gehirn.jp.",
                "TTL": 3600
            }, {
                "ID": 1755,
                "Name": "testdomain.com.",
                "Type": "NS",
                "NameServer": "ns2.gehirn.jp.",
                "TTL": 3600
            }]
        }
    },
    "is_success": true
}

ドメインの削除

ドメインの削除は DELETE メソッドで対象ドメインにリクエストするだけ。

そうすると、Deletedが返ってきます。

{
    "Deleted": {
        "Count": 1,
        "Domain": {
            "ID": 228,
            "Name": "testdomain.com.",
            "Resources": {
                "SOA": {
                    "ID": 1753,
                    "Name": "testdomain.com.",
                    "Type": "SOA",
                    "TTL": 300,
                    "MNAME": "ns1.gehirn.jp.",
                    "RNAME": "isidai@isid.ai.",
                    "Serial": 0,
                    "Refresh": 300,
                    "Retry": 900,
                    "Expire": 86400,
                    "NegativeCacheTTL": 300
                },
                "NS": [{
                    "ID": 1754,
                    "Name": "testdomain.com.",
                    "Type": "NS",
                    "NameServer": "ns1.gehirn.jp.",
                    "TTL": 3600
                }, {
                    "ID": 1755,
                    "Name": "testdomain.com.",
                    "Type": "NS",
                    "NameServer": "ns2.gehirn.jp.",
                    "TTL": 3600
                }]
            }
        }
    },
    "is_success": true
}

すべてのレスポンスには is_success が true/false で入っているので response.is_success がtrueかどうかで正常終了したか判定できます。

 

リソースの取得

あまり使うことはないですが、リソースの取得ができます。IDを指定する必要があります。

https://dns.gehirn.jp/api/resource/1757

を GET すると

{
    "Resource": {
        "ID": 1757,
        "Name": "testdomain.com.",
        "Type": "NS",
        "NameServer": "ns1.gehirn.jp.",
        "TTL": 3600
    },
    "Domain": {
        "ID": 229,
        "Name": "testdomain.com."
    },
    "is_success": true
}

のようなレスポンスが返ってきます。

リソースの追加(NSレコード)

NSリソースを追加します。

{
	"Domain":{
		"ID": 229
	},
	"Resource":{
		"Type": "NS",
		"HostName": "abc",
		"NameServer": "dns1.abc.com.",
		"TTL": 300
	}
}

こんな感じでPOSTリクエストします。
レスポンスはCreatedの中に返ってきます。

{
    "Created": {
        "Resource": {
            "ID": 1759,
            "Name": "abc.testdomain.com.",
            "Type": "NS",
            "NameServer": "dns1.abc.com.",
            "TTL": 300
        },
        "Domain": {
            "ID": 229,
            "Name": "testdomain.com."
        }
    },
    "is_success": true
}

 

リソースの追加(A/AAAAレコード)

Aレコード追加リクエスト

{
	"Domain":{
		"ID": 229
	},
	"Resource":{
		"Type": "A",
		"HostName": "abcd",
		"IPAddress": "192.168.1.100"
	}
}

TTLを省略すると自動的に3600になります。

{
    "Created": {
        "Resource": {
            "ID": 1760,
            "Name": "abcd.testdomain.com.",
            "Type": "A",
            "IPAddress": "192.168.1.100",
            "TTL": 3600
        },
        "Domain": {
            "ID": 229,
            "Name": "testdomain.com."
        }
    },
    "is_success": true
}

AAAAレコード(IPv6)は

{
	"Domain":{
		"ID": 229
	},
	"Resource":{
		"Type": "AAAA",
		"HostName": "abcd",
		"IPAddress": "240f:11:beaf:1:e2cb:4eff:fec3:e3ae",
		"TTL": 600
	}
}

のようにリクエストしてください。

リソースの追加(MXレコード)

MXリソース追加。Priorityは指定しなければ自動で10になります。HostNameは完全に省略することも、「@」で埋めることもできます。

{
	"Domain":{
		"ID": 229
	},
	"Resource":{
		"Type": "MX",
		"HostName": "@",
		"Priority": 10,
		"MailServer": "mx.gehirn.co.jp.",
		"TTL": 7200
	}
}

レスポンス

{
    "Created": {
        "Resource": {
            "ID": 1761,
            "Name": "testdomain.com.",
            "Type": "MX",
            "MailServer": "mx.gehirn.co.jp.",
            "TTL": 7200,
            "Priority": 10
        },
        "Domain": {
            "ID": 229,
            "Name": "testdomain.com."
        }
    },
    "is_success": true
}

リソースの追加(CNAMEレコード)

リクエスト

{
	"Domain":{
		"ID": 229
	},
	"Resource":{
		"Type": "CNAME",
		"HostName": "c.abc.aaa",
		"AliasTo": "abc.com."
	}
}

レスポンス

{
    "Created": {
        "Resource": {
            "ID": 1762,
            "Name": "c.abc.aaa.testdomain.com.",
            "Type": "CNAME",
            "AliasTo": "abc.com.",
            "TTL": 3600
        },
        "Domain": {
            "ID": 229,
            "Name": "testdomain.com."
        }
    },
    "is_success": true
}

リソースの追加(TXTレコード)

リクエスト

{
	"Domain":{
		"ID": 229
	},
	"Resource":{
		"Type": "TXT",
		"HostName": "google._domainkey",
		"Value": "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC14voiCulOlc1rsqKkRzLcVHJhtLwWPiKgeFo8VfP72+J16AauaL2fEBt6tAujVOZfh6cR72ttxDkeRPoXQd2XxvzKMOfzAAb502l/mY7XkeXb2MQX5sRvIx4Eb6o+XNK2Q68aEuBXp3l+MRdMTC58o35wlwY2NB4Sy4H/IgeAmwIDAQAB"
	}
}

レスポンス

{
    "Created": {
        "Resource": {
            "ID": 1763,
            "Name": "google._domainkey.testdomain.com.",
            "Type": "TXT",
            "Value": "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC14voiCulOlc1rsqKkRzLcVHJhtLwWPiKgeFo8VfP72+J16AauaL2fEBt6tAujVOZfh6cR72ttxDkeRPoXQd2XxvzKMOfzAAb502l\/mY7XkeXb2MQX5sRvIx4Eb6o+XNK2Q68aEuBXp3l+MRdMTC58o35wlwY2NB4Sy4H\/IgeAmwIDAQAB",
            "TTL": 3600
        },
        "Domain": {
            "ID": 229,
            "Name": "testdomain.com."
        }
    },
    "is_success": true
}

リソースの追加(SRVレコード)
リクエスト

{
	"Domain":{
		"ID": 229
	},
	"Resource":{
		"Type": "SRV",
		"HostName": "_xmpp-server._tcp",
		"Priority": 1,
		"Weight": 0,
		"TTL": 360,
		"Port": 5269,
		"Target": "xmpp-server.l.google.com."
	}
}

レスポンス

{
    "Created": {
        "Resource": {
            "ID": 1764,
            "Name": "_xmpp-server._tcp.testdomain.com.",
            "Type": "SRV",
            "TTL": 360,
            "Priority": 1,
            "Weight": 0,
            "Port": 5269,
            "Target": "xmpp-server.l.google.com."
        },
        "Domain": {
            "ID": 229,
            "Name": "testdomain.com."
        }
    },
    "is_success": true
}

TTL,Priority,Weightは省略できます。TTLは3600、Priority/Weightは0がデフォルトです。

リソースの変更

リソースを変更する場合は、変更したいIDをURIに入れて、リクエストに変更したい項目だけを指定してPUTします。
例: Resource.ID 1764 の Priority を 1 から 3 に変更。

https://dns.gehirn.jp/api/resource/1764

にPUTメソッドでリクエスト

{
	"Resource":{
		"Priority": 3
	}
}

レスポンス

{
    "Updated": {
        "Resource": {
            "ID": 1764,
            "Name": "_xmpp-server._tcp.testdomain.com.",
            "Type": "SRV",
            "TTL": 360,
            "Priority": 3,
            "Weight": 0,
            "Port": 5269,
            "Target": "xmpp-server.l.google.com."
        },
        "Domain": {
            "ID": 229,
            "Name": "testdomain.com."
        }
    },
    "is_success": true
}

リソースの削除

リソースの削除はDELETEメソッドで行います。

https://dns.gehirn.jp/api/resource/1764

にDELETEメソッドでリクエスト。
レスポンス

{
    "Deleted": {
        "Resource": {
            "ID": 1764,
            "Name": "_xmpp-server._tcp.testdomain.com.",
            "Type": "SRV",
            "TTL": 360,
            "Priority": 3,
            "Weight": 0,
            "Port": 5269,
            "Target": "xmpp-server.l.google.com."
        },
        "Domain": {
            "ID": 229,
            "Name": "testdomain.com."
        }
    },
    "is_success": true
}

Deleted の中に入って返ってきます。

まだまだベータ版なのでバグがあったら教えて下さい。

Pocket

You Might Also Like