API連携とは?バリュードメインAPIでドメイン、DNS設定の取得と変更を実践
APIは、さまざまなサービスで提供されています。
APIを活用して自動化することで、作業効率が向上します。
今回は、バリュードメインAPIを例にして「バリュードメインAPIをPHP言語でAPI連携する方法」を紹介します。
- APIキーの準備
- PHPでAPI連携方法
- ドメイン情報の取得、DNS設定の取得・変更
多数のドメインを保有する場合は、独自でドメインの管理をAPI連携で自動化できます。
また、メンテナンスするシステムを構築する場合にもAPI連携を利用するのが必須となるでしょう。
APIの連携の方法を知りたい方にも参考にして頂けたらと思います。
バリュードメインAPI ドメイン検索&登録編として、curlのコンソールコマンドを利用した下記記事もあわせてご覧ください。
API連携とは
API連携(Application Programming Interface Integration)とは、異なるソフトウェアやアプリケーション間で情報を共有したり、機能を利用したりするためのプロセスです。
API連携の特徴としては、以下のような点が挙げられます:
- 相互運用性:
API連携により、異なるシステムやアプリケーションが互いに通信がきます。 - リアルタイム性:
API連携により、リアルタイムでデータや機能を共有が可能です。 - 機能拡張:
API連携を通じて外部のサービスや機能を利用できるため、自身のシステムやアプリケーションの機能を拡張ができます。 - リソース共有:
API連携により、データや機能を共有することでリソースの効率的な利用が可能です。 - プラットフォームの拡張性:
API連携により、自身のシステムやアプリケーションを他のプラットフォームやサービスと連携ができます。
バリュードメインAPIでドメイン設定を取得する手順
バリュードメインAPIでドメインを設定する手順は以下の通りです。
- APIキーを準備する
- PHPでAPI連携を行う
- ドメインの情報を取得する
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キーが万が一流出した場合や、再度発行したいときは「APIキーの再発行」してください。その場合は以前のAPIキーは無効になり使えなくなります。
APIキー発効後は、APIにアクセス可能なIPアドレスを設定する必要があります。複数からアクセスしたい場合はカンマ区切りでIPアドレスを指定できます。
以上で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キーを使って発行してみましょう。
ドメインの情報を取得する
自身のアカウントで管理しているドメインの情報取得します。
APIリクエスト | GET /domains/{domain} |
---|---|
AUTHORIZATIONS | bearerAuth |
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に格納し、必要項目を表示します。
実行結果
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の場合
.
.
"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の場合
.
.
"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設定を変更する手順は、以下の通りです。
- APIでDNS設定の情報を取得する
- APIでDNS設定を変更する
APIでDNS設定の情報を取得する
アカウントで管理している指定のDNS設定を取得します。
https://www.value-domain.com/api/doc/domain/#tag/DNS/paths/~1domains~1{domain}~1dns/getAPIリクエスト | GET /domains/{domain}/dns |
---|---|
AUTHORIZATIONS | bearerAuth |
QUERY PARAMETERS | |
domain | string ドメインIDとドメイン名のどちらでも指定可能 |
※QUERYのdomainはドメインIDまたはドメイン名です。ドメインIDはバリュードメインが管理しているユニークな番号で、「ドメインの情報一覧取得」のAPIで参照できます
※ns_type:valuedomain1 valuedomain11 のみ対応。他社ネームサーバーや gmo enom のネームサーバー使用時は valuedomain11 の内容が返却されます。
ドメインの情報取得のAPIリクエストに /dnsを付けてリクエストすると、該当の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":"202306181712529285120002508V"}
APIでDNS設定を変更する
アカウントで管理している指定のDNS設定を取得します。
https://www.value-domain.com/api/doc/domain/#tag/DNS/paths/~1domains~1{domain}~1dns/putAPIリクエスト | PUT /domains/{domain}/dns |
---|---|
AUTHORIZATIONS | bearerAuth |
PATH PARAMETERS | |
domain 必須 | string ドメインIDとドメイン名のどちらでも指定可能 |
REQUEST BODY SCHEMA | application/json |
ns_type | string ネームサーバータイプ |
records | string DNSレコード (レコードごとに改行区切り) タイプ,ターゲット,内容 |
ttl | TTL |
//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に反映されます。差分変更や行追加ではありませんので注意してください。
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
URL | GET |
---|---|
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の利用がメリットとなります。
ドメイン・サーバー同時契約でドメイン更新費用永久無料(年間最大3,858円お得)
是非、お得なこの機会にご利用ください。最新のキャンペーンはこちらから
ドメイン運用コストの最小化、最短工数・最良のドメイン管理ならお任せください!ドメインを100個以上管理している方・ドメイン管理業者・Web制作会社の方のためのドメイン一括管理・最適化サービス「ドメインコンシェルジュ」。
※ユーザーノートの記事は、弊社サービスをご利用のお客様に執筆いただいております。
医療メーカーで新素材研究開発後、電機メーカーで制御器系システム開発を経てIT系マルチエンジニアをしています。またデザイン思考を実践し、アート思考などのいろんな思考方法に興味があります。