API連携とは?バリュードメインAPIでドメイン、DNS設定の取得と変更を実践

User Note

APIは、さまざまなサービスで提供されています。
APIを活用して自動化することで、作業効率が向上します。

今回は、バリュードメインAPIを例にして「バリュードメインAPIをPHP言語でAPI連携する方法」を紹介します。

  1. APIキーの準備
  2. PHPでAPI連携方法
  3. ドメイン情報の取得、DNS設定の取得・変更

多数のドメインを保有する場合は、独自でドメインの管理をAPI連携で自動化できます。
また、メンテナンスするシステムを構築する場合にもAPI連携を利用するのが必須となるでしょう。

APIの連携の方法を知りたい方にも参考にして頂けたらと思います。

バリュードメインAPI ドメイン検索&登録編として、curlのコンソールコマンドを利用した下記記事もあわせてご覧ください。

API連携とは

API連携(Application Programming Interface Integration)とは、異なるソフトウェアやアプリケーション間で情報を共有したり、機能を利用したりするためのプロセスです。

APIとは

API連携の特徴としては、以下のような点が挙げられます:

  • 相互運用性:
    API連携により、異なるシステムやアプリケーションが互いに通信がきます。
  • リアルタイム性:
    API連携により、リアルタイムでデータや機能を共有が可能です。
  • 機能拡張:
    API連携を通じて外部のサービスや機能を利用できるため、自身のシステムやアプリケーションの機能を拡張ができます。
  • リソース共有:
    API連携により、データや機能を共有することでリソースの効率的な利用が可能です。
  • プラットフォームの拡張性:
    API連携により、自身のシステムやアプリケーションを他のプラットフォームやサービスと連携ができます。

バリュードメインAPIでドメイン設定を取得する手順

バリュードメインAPIでドメインを設定する手順は以下の通りです。

  1. APIキーを準備する
  2. PHPでAPI連携を行う
  3. ドメインの情報を取得する

APIキーを準備する

様々なサービスにおいてAPIを使うにはAPIキーが必要になります。また、APIキーは一般的に「トークン」と呼ばれることもあります。APIを利用する際にセキュリティーと認証の目的で必要とされます。
バリュードメインでもドメイン関連の操作ができるAPIが提供されており、これを利用するにはユーザ専用のAPIキーが必要となります。
Value Domainユーザはすでにユーザアカウントをお持ちですので、https://www.value-domain.com/login.phpからログインしてAPIキーを取得できます。

ログイン後にメニューリスト「マイページ」の「バリュードメインAPI」をクリックしてください。
既に発行済みの場合は、ページ内のAPI KEYの管理リンクからでもアクセスできます。

バリュードメイン「マイページ」画面

初めて発行する場合は、「API KEYの発行する」ボタンを押して発行してください。

バリュードメインAPI発行ボタン

発行されたAPIキーの文字列は記録してください。この画面を閉じるとAPIキーの内容はわからなくなります。
その場合は「APIキーの再発行」を行ってください。

バリュードメインAPI KEY画面

※APIキーは他者が確認できないよう厳重に管理してください。APIキーが万が一流出した場合や、再度発行したいときは「APIキーの再発行」してください。その場合は以前のAPIキーは無効になり使えなくなります。

APIキー発効後は、APIにアクセス可能なIPアドレスを設定する必要があります。複数からアクセスしたい場合はカンマ区切りでIPアドレスを指定できます。

バリュードメインAPI KEY有効設定

以上でAPIキーの取得とアクセスするサーバの許可ができましたので、早速PHP言語でAPI連携を使ってみましょう。

PHPでAPI連携を行う

バリュードメインAPIドキュメント (1.0.0)にPHP言語でのサンプルコードが記載されていますので、それを利用します。
PHPでは、cURL関数を使用してAPIリクエストを発行することが一般的です。
cURLは、様々なプロトコルをサポートし、HTTPリクエストを送信するための便利な関数です。


$apikey = 'Your APIKEY';

$url = "https://api.value-domain.com/v1";
$path = "/domains";
$method = "GET";
$postfields = array();
$post_query = json_encode($postfields);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url . $path);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
if ($method!=='GET') {
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post_query);
  curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);//FIXME use http version 1.1
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);

$headers = array();
$headers[] = "Content-Type: application/json";
if ($method!=='GET') {
  $headers[] = 'Content-Length: ' . strlen($post_query);
}
$headers[] = 'Authorization: Bearer ' . $apikey;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($ch);
if (curl_errno($ch)) {
  echo 'Connection Error: ' . curl_errno($ch) . ' - ' . curl_error($ch);exit;
}
$info = curl_getinfo($ch);

curl_close($ch);

サンプルコードはGET、POSTに対応していますので、適切なパラメーターを設定してリクエストが成功すれば、APIサーバから200 Successコードが返送されます。

・エンドポイントはhttps://api.value-domain.com/v1/でHTTPプロトコルのGET、POST、PUT、DELETEメソッドでレスポンスを送信します。
・ドメインの情報一覧およびDNS設定の取得はGETで、DNS設定の変更はPOST PUTで実施します。
・リクエスト時のパラメーターは、POSTの場合は$postfieldsに連想配列にデータをセットし、json形式json_encode()でリクエストします。
・POST時には、データ長の値が必要で、HTTPヘッダーに$headers[] = 'Content-Length: ' . strlen($post_query)を追加します。GETの場合はURLのGETパラメータとして渡します。
・APIの認証方法はbearerAuth形式となっていますので、$headers[] = 'Authorization: Bearer ' . $apikey;でAPI KEYをHTTPヘッダーに「Authorization: Bearer APIKEY」の形式で含めます。

Bearer認証はトークンを利用した認証・認可に使用されることを想定しており、OAuth 2.0の仕様の一部として定義されていますが、仕様ではHTTPでも使用可能で、HTTPのAuthorizationヘッダにスキームとして指定できます。
詳細は、『RFC 6750 The OAuth 2.0 Authorization Framework: Bearer Token Usage
では次のセクションで実際APIキーを使って発行してみましょう。

ドメインの情報を取得する

自身のアカウントで管理しているドメインの情報取得します。

https://www.value-domain.com/api/doc/domain/#tag/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3/paths/~1domains~1{domain}/get

APIリクエストGET /domains/{domain}
AUTHORIZATIONSbearerAuth
QUERY PARAMETERS 

domain
必須

string
ドメインIDとドメイン名のどちらでも指定可能

※QUERYのdomainはドメインIDまたはドメイン名です。ドメインIDはバリュードメインが管理しているユニークな番号です。ドメインIDは「ドメインの情報一覧取得」のAPIで参照できます。
※ ns_type:valuedomain1 valuedomain11 のみ対応。他社ネームサーバーや gmo enom のネームサーバー使用時は valuedomain11 の内容が返却されます。

//get_domain_info.php
<?php

if(is_null($argv[1])){
        print "ドメインIDまたはドメイン名を指定してください。\n";
        exit();
}else{
        $domain_id = $argv[1];
}

$apikey = 'Your APIKEY';

$url = 'https://api.value-domain.com/v1';   // APIのエンドポイントURLを指定
$path = "/domains/" . $domain_id;
$method = "GET";
$headers = array();

$headers[] = "Content-Type: application/json";
$headers[] = 'Authorization: Bearer ' . $apikey;

$ch = curl_init();
$url .= $path;

print $url ."\n\n";

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($ch);
curl_close($ch);

// レスポンスの処理
if ($response === false) {
    // エラーハンドリング
    die('APIリクエストが失敗しました: ' . curl_error($ch));
} else {
        // レスポンスを表示
        print $response. "\n\n";

        $data = json_decode($response, true);

        // ドメイン情報の表示
        echo "Domain ID: " . $data['results']['domainid'] . "\n";
        echo "Domain Name: " . $data['results']['domainname'] . "\n";
        echo "Registrar: " . $data['results']['registrar'] . "\n";
        echo "Expiration Date: " . $data['results']['expirationdate'] . "\n";

        // ステータスの表示
        echo "Status:\n";
        foreach ($data['results']['status'] as $status) {
            echo "- " . $status . "\n";
        }

        // NS情報の表示
        echo "Name Servers:\n";
        foreach ($data['results']['ns'] as $ns) {
            echo "- " . $ns . "\n";
        }

        // Contact情報の表示
        echo "Contact Information:\n";
        foreach ($data['results']['contact'] as $key => $value) {
            echo $key . ": " . $value . "\n";
        }

        // リクエストIDの表示
        echo "Request ID: " . $data['request_id'] . "\n";
}
?>

・ドメイン名をパラメータで指定して、$pathに連結してアクセスURLを作成します。
・APIサーバから200 Successコードが返送されたら、内容をjson_decode()関数でデコードして$dataに格納し、必要項目を表示します。

実行結果

# php get_domain_info.php picolix.jp
https://api.value-domain.com/v1/domains/sco.jp

{"results":{"domainid":28046,"domainname":"picolix.jp","registrar":"JPRS","expirationdate":"2024-01-31","status":["ACTIVE"],"transfer_lock":1,"autorenew":1,"autorenew_all":10,"autorenew_domain":10,"ns":["ns1.value-domain.com","ns2.value-domain.com","ns3.value-domain.com","ns4.value-domain.com","ns5.value-domain.com"],"whoisproxy":1,"contact":{"RegistrantName":"Whois\u60c5\u5831\u516c\u958b\u4ee3\u884c\u30b5\u30fc\u30d3\u30b9 by \u30d0\u30ea\u30e5\u30fc\u30c9\u30e1\u30a4\u30f3","RegistrantNameEn":"Whois Privacy Protection Service by VALUE-DOMAIN","RepresentativeName":"XXXXXXX","RepresentativeDivision":"","EMailAddress":"[email protected] ","PhoneNumber":"XX-XXXX-XXXX","FaxNumber":"XX-XXXX-XXXX","PostalCode":"530-0011","Prefecture":"\u5927\u962a\u5e9c","PostalAddress1":"\u5927\u962a\u5e02\u5317\u533a\u5927\u6df1\u753a3-1","PostalAddress2":"\u30b0\u30e9\u30f3\u30d5\u30ed\u30f3\u30c8\u5927\u962a \u30bf\u30ef\u30fcB\u300023\u968e","PostalAddress3":""}},"request_id":"202306251125330306280002508V"}

Domain ID: 28046
Domain Name: picolix.jp
Registrar: JPRS
Expiration Date: 2024-01-31
Status:
- ACTIVE
Name Servers:
- ns1.value-domain.com
- ns2.value-domain.com
- ns3.value-domain.com
- ns4.value-domain.com
- ns5.value-domain.com
Contact Information:
RegistrantName: Whois情報公開代行サービス by バリュードメイン
RegistrantNameEn: Whois Privacy Protection Service by VALUE-DOMAIN
RepresentativeName: XXXXXX
RepresentativeDivision:
EMailAddress: [email protected]
PhoneNumber: XX-XXXX-XXXX
FaxNumber: XX-XXXX-XXXX
PostalCode: 530-0011
Prefecture: 大阪府
PostalAddress1: 大阪市北区大深町3-1
PostalAddress2: グランフロント大阪 タワーB 23階
PostalAddress3:
Request ID: 202306181647334682410002508V

.jpや.comによってContactの構造や付加情報が変わります。$data['results']['contact']の内容の違い見やすいように表示してみます。

.jpの場合

"results": {
.
.
"contact": {
"RegistrantName": "Whois情報公開代行サービス by バリュードメイン",
"RegistrantNameEn": "Whois Privacy Protection Service by VALUE-DOMAIN",
"RepresentativeName": "XXXXXX",
"RepresentativeDivision": "",
"EMailAddress": "[email protected] ",
"PhoneNumber": "XX-XXXX-XXXX",
"FaxNumber": "XX-XXXX-XXXX",
"PostalCode": "530-0011",
"Prefecture": "大阪府",
"PostalAddress1": "大阪市北区大深町3-1",
"PostalAddress2": "グランフロント大阪 タワービルB号23階",
"PostalAddress3": ""
}
.
.

.comの場合

"results": {
.
.
"contact": {
"registrant": {
"firstname": "Whois",
"lastname": "Privacy Protection Service by VALUE-DOMAIN",
"organization": "Whois Privacy Protection Service by VALUE-DOMAIN",
"country": "JP",
"postalcode": "542-0081",
"state": "Osaka",
"city": "Osaka",
"address1": "Chuo-ku Minamisenba 3-1-8",
"address2": "",
"email": "[email protected]",
"phone": "+81.XXXXXXXXX",
"fax": "+81.XXXXXXXXX"
},
"admin": {
"firstname": "Whois",
"lastname": "Privacy Protection Service by VALUE-DOMAIN",
"organization": "Whois Privacy Protection Service by VALUE-DOMAIN",
"country": "JP",
"postalcode": "542-0081",
"state": "Osaka",
"city": "Osaka",
"address1": "Chuo-ku Minamisenba 3-1-8",
"address2": "",
"email": "[email protected]",
"phone": "+81.XXXXXXXXX",
"fax": "+81.XXXXXXXXX"
},
"tech": {
"firstname": "Whois",
"lastname": "Privacy Protection Service by VALUE-DOMAIN",
"organization": "Whois Privacy Protection Service by VALUE-DOMAIN",
"country": "JP",
"postalcode": "542-0081",
"state": "Osaka",
"city": "Osaka",
"address1": "Chuo-ku Minamisenba 3-1-8",
"address2": "",
"email": "[email protected]",
"phone": "+81.XXXXXXXXX",
"fax": "+81.XXXXXXXXX"
},
"billing": {
"firstname": "Whois",
"lastname": "Privacy Protection Service by VALUE-DOMAIN",
"organization": "Whois Privacy Protection Service by VALUE-DOMAIN",
"country": "JP",
"postalcode": "542-0081",
"state": "Osaka",
"city": "Osaka",
"address1": "Chuo-ku Minamisenba 3-1-8",
"address2": "",
"email": "[email protected]",
"phone": "+81.XXXXXXXXX",
"fax": "+81.XXXXXXXXX"
}
.
.

.comの場合は"contact"以外に"admin"、tech"、"billing"の情報が付加されています。

※表記中のデータでTEL、メールアドレスは伏字にしています。

バリュードメインAPIでドメインのDNS設定を変更する手順

バリュードメインAPIでドメインのDNS設定を変更する手順は、以下の通りです。

  1. APIでDNS設定の情報を取得する
  2. APIでDNS設定を変更する

APIでDNS設定の情報を取得する

アカウントで管理している指定のDNS設定を取得します。

https://www.value-domain.com/api/doc/domain/#tag/DNS/paths/~1domains~1{domain}~1dns/get
APIリクエストGET /domains/{domain}/dns
AUTHORIZATIONSbearerAuth
QUERY PARAMETERS 

domain
必須

string
ドメインIDとドメイン名のどちらでも指定可能

※QUERYのdomainはドメインIDまたはドメイン名です。ドメインIDはバリュードメインが管理しているユニークな番号で、「ドメインの情報一覧取得」のAPIで参照できます
※ns_type:valuedomain1 valuedomain11 のみ対応。他社ネームサーバーや gmo enom のネームサーバー使用時は valuedomain11 の内容が返却されます。

ドメインの情報取得のAPIリクエストに /dnsを付けてリクエストすると、該当のDNSのレコード情報が返されます。

# php get_dns_info.php sco.jp
{"results":{"domainid":1595174,"domainname":"sco.jp","ns_type":"valuedomain1","records":"a @ 160.251.53.104\na mente 160.251.53.104\na mail 160.251.150.116\nmx mail.sco.jp. 10\ntxt @ v=spf1 a:mail.sco.jp ~a\n","registrar":"JPRS","ttl":600},"request_id":"202306181712529285120002508V"}

APIでDNS設定を変更する

アカウントで管理している指定のDNS設定を取得します。

https://www.value-domain.com/api/doc/domain/#tag/DNS/paths/~1domains~1{domain}~1dns/put
APIリクエストPUT /domains/{domain}/dns
AUTHORIZATIONSbearerAuth
PATH PARAMETERS 
domain
必須
string
ドメインIDとドメイン名のどちらでも指定可能
REQUEST BODY SCHEMAapplication/json
ns_typestring
ネームサーバータイプ
recordsstring
DNSレコード (レコードごとに改行区切り)
タイプ,ターゲット,内容
ttlTTL

//set_dns_records.php

$apikey = 'Your APIKEY';
$domain_id = "sco.jp";
<?php
$url = 'https://api.value-domain.com/v1';   // APIのエンドポイントURLを指定
$path = "/domains/" . $domain_id . "/dns";
$method = "PUT";
$headers = array();


$postfields = array(
        'ns_type' => 'valuedomain1',
        'records' => "a @ 160.251.53.104\na mente 160.251.53.104\na mail 160.251.150.116\nmx mail.sco.jp 10\ntxt @ v=spf1 a:mail.sco.jp ~a",
        'ttl' => '600'
);
$post_query = json_encode($postfields);


$headers[] = "Content-Type: application/json";
if ($method!=='GET') {
        $headers[] = 'Content-Length: ' . strlen($post_query);
}
$headers[] = 'Authorization: Bearer ' . $apikey;

$ch = curl_init();
$url .= $path;

print $url;
print "\n";

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);

if ($method!=='GET') {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_query);
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);//FIXME use http version 1.1
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($ch);
curl_close($ch);

// レスポンスの処理
if ($response === false) {
    // エラーハンドリング
    die('APIリクエストが失敗しました: ' . curl_error($ch));
} else {
        // レスポンスを表示
        echo $response;
        exit();
}
?>

POSTタイプでリクエストします。よくGUIでは1行ずつ設定できるイメージですが、recordsの値をそのままDNS recordに反映されます。差分変更や行追加ではありませんので注意してください。

#php set_dns_record.php sco.jp
https://api.value-domain.com/v1/domains/sco.jp/dns
{"results":{"domainid":1595174,"domainname":"sco.jp","ns_type":"valuedomain1","records":"a @ 160.251.53.104\na mente 160.251.53.104\na mail 160.251.150.116\nmx mail.sco.jp. 10\ntxt @ v=spf1 a:mail.sco.jp ~a\n","registrar":"JPRS","ttl":600},"request_id":"202306181719065467150002508V"}


Value DomainではダイナミックDNSが利用できます。登録設定は管理画面からできますが、APIからも設定できます。ただし、対象レコードの変更は以下のようにAPI連携ではなくてURLで直接指定して変更します。
https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=$MY_DOMAIN&p=$MY_PASS&h=$MY_HOSTNAME

URLGET
QUERY PARAMETERS 
MY_DOMAIMドメイン名
MY_PASSダイナミックDNS設定パスワード
MY_HOSTNAMEホスト名

最後に:バリュードメインでAPI連携をしてみましょう

バリュードメインを利用して、多くのドメインとサーバーを管理している場合、同じ手順を繰り返し行うために時間がかかってしまうことがあります。そんな場合には、APIを活用して自動化することで作業効率を向上させることがおすすめです。

また、バリュードメインのAPIを使用すると、ドメインの取得や更新料金が割引(API割)されます
割引はAPIを利用する際に自動的に適用されます。なお、キャンペーン料金がある場合は、条件に応じて最も安い料金が適用されます。

割引率は、「お得意様割引」https://www.value-domain.com/service/repeat-customer-discount/の15個以上のドメインを所有している場合と同じ割引が得られることとなります。

既存のドメインでもAPIを使用して更新すると、割引が自動的に適用されますので、多数のドメインを所有している方にはAPIの利用がメリットとなります。

▽キャンペーン開催中!
バリュードメインでは、
【 .com /.net /org: 750  .info /.biz: 100 .co.jp: 2,000】の春の応援SALE、 ドメイン・サーバー同時契約でドメイン更新費用永久無料(年間最大3,124円お得)
などお得な特典やキャンペーンが盛りだくさん! 是非、お得なこの機会にご利用ください。最新のキャンペーンはこちらから
ドメイン取得ならValue Domain

ドメイン運用コストの最小化、最短工数・最良のドメイン管理ならお任せください!ドメインを100個以上管理している方・ドメイン管理業者・Web制作会社の方のためのドメイン一括管理・最適化サービス「ドメインコンシェルジュ」。
ドメイン管理にお悩みの方に向けた、Value-Domainのドメインコンシェルジュサービス


ユーザーノートの記事は、弊社サービスをご利用のお客様に執筆いただいております。

執筆者:苗場 翔様

医療メーカーで新素材研究開発後、電機メーカーで制御器系システム開発を経てIT系マルチエンジニアをしています。またデザイン思考を実践し、アート思考などのいろんな思考方法に興味があります。

Posted by admin-dev


おすすめ関連記事

service

Value Domain
ドメイン取得&レンタルサーバーなら
Value Domain
ドメイン登録実績600万件を誇るドメイン取得・管理サービスと、高速・高機能・高品質なレンタルサーバーや、SSL証明書などを提供するドメイン・ホスティング総合サービスです。
目次へ目次へ