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レコード)
{ "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 の中に入って返ってきます。
まだまだベータ版なのでバグがあったら教えて下さい。