오픈소스 PHP

Registrar API

NameSilo, GoDaddy, Namecheap, Dynadot에서 도메인을 관리하는 하나의 PHP 라이브러리 — 여기에 zone, DNS, cache를 위한 Cloudflare 어댑터까지. 사용 가능 여부 확인, 등록, 갱신, 이전, DNS 레코드, 네임서버를 모두 하나의 일관된 인터페이스로 처리합니다.

composer require josuamarcelc/registrar-api

어댑터

지원되는 등록 대행사

브랜드 문자열로 어댑터를 선택하세요. 모든 어댑터는 동일한 메서드 시그니처를 공유하므로 코드를 다시 작성하지 않고도 등록 대행사를 전환할 수 있습니다.

NameSilo'namesilo'
GoDaddy'godaddy'
Namecheap'namecheap'
Dynadot'dynadot'
CloudflareDNS / zones

라이브 데모

도메인 사용 가능 여부 확인

서버 측에서 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');

응답 형태

반환되는 내용

okbool — 빠른 성공 확인
raw등록 대행사의 원본 파싱된 페이로드 (JSON 또는 배열로 변환된 XML)
http가능한 경우 HTTP 상태 코드
err전송 계층 오류 문자열 (호출이 실패한 경우에만)
available / unavailable / invalidcheckAvailability()가 채우는 버킷
recordsgetDNS()가 반환하는 {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 { /* ... */ }
}