오픈소스 PHP
Registrar API
NameSilo, GoDaddy, Namecheap, Dynadot에서 도메인을 관리하는 하나의 PHP 라이브러리 — 여기에 zone, DNS, cache를 위한 Cloudflare 어댑터까지. 사용 가능 여부 확인, 등록, 갱신, 이전, DNS 레코드, 네임서버를 모두 하나의 일관된 인터페이스로 처리합니다.
composer require josuamarcelc/registrar-api
어댑터
지원되는 등록 대행사
브랜드 문자열로 어댑터를 선택하세요. 모든 어댑터는 동일한 메서드 시그니처를 공유하므로 코드를 다시 작성하지 않고도 등록 대행사를 전환할 수 있습니다.
라이브 데모
도메인 사용 가능 여부 확인
서버 측에서 NameSilo 어댑터를 통해 실제 checkAvailability() 호출을 실행합니다. 최대 10개의 도메인을 쉼표, 공백 또는 줄바꿈으로 구분하여 입력하세요. 5분당 10회로 제한됩니다.
빠른 시작
세 줄이면 호출 완성
<?php
require __DIR__ . '/vendor/autoload.php';
use RegistrarAPI\RegistrarAPI;
$api = RegistrarAPI::make('namesilo', [
'api_key' => 'YOUR_NAMESILO_API_KEY'
]);
$result = $api->checkAvailability(['example.com', 'mybrand.io']);
print_r($result);
자격 증명
어댑터별 설정
각 어댑터는 설정 배열을 받습니다. 아래는 보통 필요한 최소한의 설정입니다.
NameSilo
RegistrarAPI::make('namesilo', [
'api_key' => 'YOUR_KEY',
]); GoDaddy
RegistrarAPI::make('godaddy', [
'api_key' => 'KEY',
'api_secret' => 'SECRET',
// optional: 'base' => 'https://api.godaddy.com/v1'
]); Namecheap
RegistrarAPI::make('namecheap', [
'api_user' => 'USERNAME',
'api_key' => 'KEY',
'client_ip' => 'SERVER_PUBLIC_IP',
// optional: 'base' => 'https://api.namecheap.com/xml.response'
]); Dynadot
RegistrarAPI::make('dynadot', [
'api_key' => 'KEY',
]); 메서드
일반적인 작업
모든 어댑터는 동일한 메서드 시그니처를 구현합니다. 반환 값은 정규화된 연관 배열입니다.
// Availability
$api->checkAvailability(['example.com']);
// Lifecycle
$api->registerDomain('example.com', [
'years' => 1,
'privacy' => true,
'auto_renew' => true,
'registrant' => [ /* contact fields */ ],
]);
$api->renewDomain('example.com', 1);
$api->transferDomain('example.com', ['auth_code' => 'EPP']);
$api->getDomain('example.com');
// DNS records
$api->getDNS('example.com');
$api->setDNS('example.com', [
['type'=>'A', 'host'=>'@', 'value'=>'203.0.113.10', 'ttl'=>600],
['type'=>'CNAME','host'=>'www', 'value'=>'@', 'ttl'=>600],
]);
$api->addDNS('example.com', ['type'=>'TXT','host'=>'@','value'=>'v=spf1 -all','ttl'=>300]);
$api->delDNS('example.com', ['type'=>'TXT','host'=>'@']);
// Nameservers
$api->setNameServers('example.com', ['ns1.host.com','ns2.host.com']);
// Escape hatch — call any raw endpoint the adapter doesn't wrap
$api->raw('domains/suggestions?query=mybrand&limit=5');
응답 형태
반환되는 내용
bool — 빠른 성공 확인checkAvailability()가 채우는 버킷getDNS()가 반환하는 {type,host,value,ttl,prio?} 배열보너스
Cloudflare 어댑터
같은 라이브러리, 같은 형태이지만 zone, DNS 레코드, cache 삭제, 무료 토글(Always HTTPS, Auto HTTPS Rewrites, Brotli, Minify, Rocket Loader, Dev Mode)을 위한 것입니다.
$cf = RegistrarAPI::make('cloudflare', ['api_token' => 'CF_TOKEN']);
$cf->createZone('example.com');
$cf->setDNS('example.com', [
['type'=>'A','host'=>'@','value'=>'198.51.100.10','ttl'=>300,'proxied'=>true],
]);
$cf->purgeEverything('example.com'); 기여하기
파일 하나로 새 등록 대행사 추가
src/adapters/에 BaseAdapter를 상속하는 클래스를 만들고 추상 메서드를 구현하세요. Composer가 자동으로 이를 인식합니다.
namespace RegistrarAPI\Adapters;
use RegistrarAPI\Core\BaseAdapter;
class MyRegistrar extends BaseAdapter {
protected string $brand = 'myregistrar';
public function checkAvailability(array $domains): array { /* ... */ }
public function registerDomain(string $domain, array $opts): array { /* ... */ }
public function renewDomain(string $domain, int $years=1, array $opts=[]): array { /* ... */ }
public function transferDomain(string $domain, array $opts): array { /* ... */ }
public function getDomain(string $domain): array { /* ... */ }
public function getDNS(string $domain): array { /* ... */ }
public function setDNS(string $domain, array $records): array { /* ... */ }
public function addDNS(string $domain, array $record): array { /* ... */ }
public function delDNS(string $domain, array $selector): array { /* ... */ }
public function setNameServers(string $domain, array $nameservers): array { /* ... */ }
public function raw(string $op, array $params=[]): array { /* ... */ }
}