estratos/domain-api-interface 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

estratos/domain-api-interface

Composer 安装命令:

composer require estratos/domain-api-interface

包简介

Domain API Interface Bundle - Common contracts for domain registrar providers

README 文档

README

PHP Version Symfony Version License

Overview

This bundle provides a set of common contracts (interfaces) for domain registrar integration. It defines the standard API that all domain provider implementations must follow.

Purpose

The Domain API Interface Bundle serves as the foundation for a pluggable domain registrar architecture. By coding against these contracts, applications can seamlessly switch between different domain registrars without changing business logic.

Architecture

┌─────────────────────────────────────────────┐ │ Domain API Interface Bundle │ │ (Contracts & DTOs - This Bundle) │ └────────────────┬────────────────────────────┘ │ Implements ┌────────────┼────────────┬───────────────┐ │ │ │ │ ┌───▼────┐ ┌───▼────┐ ┌───▼────┐ ┌─────▼─────┐ │NameSilo │ │GoDaddy │ │Porkbun │ │ Cloudflare │ │ Bundle │ │ Bundle │ │ Bundle │ │ Registry │ └─────────┘ └────────┘ └────────┘ └───────────┘

Features

  • ✅ Pure interface definitions - no implementation
  • ✅ Immutable DTOs (readonly classes)
  • ✅ Strong typing with PHP 8.3+
  • ✅ Enum support for type-safe values
  • ✅ Request objects for type-safe API calls
  • ✅ SOLID principles
  • ✅ PSR-4 autoloading
  • ✅ PSR-12 coding standards

Installation

composer require estratos/domain-api-interface


Components
Contracts (Interfaces)
DomainProviderInterface - Domain registration and management

DNSProviderInterface - DNS record management

ContactProviderInterface - Contact management

AccountProviderInterface - Account balance and pricing

PrivacyProviderInterface - WHOIS privacy protection

LockProviderInterface - Domain locking/unlocking

NameServerProviderInterface - Name server management

Data Transfer Objects (DTOs)
All DTOs are immutable readonly classes:

DomainAvailability - Domain availability check result

DomainInfo - Detailed domain information

DomainSummary - Brief domain information

RegistrationResult - Registration operation result

TransferStatus - Domain transfer status

DNSRecord - DNS record information

Contact - Contact information

AccountBalance - Account balance information

PriceList - Pricing information

PrivacyStatus - Privacy protection status

LockStatus - Domain lock status

Request Objects
Type-safe request objects for API calls:

RegisterDomainRequest - Domain registration request

RenewDomainRequest - Domain renewal request

TransferDomainRequest - Domain transfer request

AddDnsRecordRequest - Add DNS record request

UpdateDnsRecordRequest - Update DNS record request

DeleteDnsRecordRequest - Delete DNS record request

AddContactRequest - Add contact request

UpdateContactRequest - Update contact request

Enums
RecordType - DNS record types (A, AAAA, CNAME, MX, TXT, etc.)

Usage Example
Implementing a Provider
php
<?php

declare(strict_types=1);

namespace YourProvider\Service;

use Estratos\DomainApiInterface\Domain\DomainProviderInterface;
use Estratos\DomainApiInterface\DTO\DomainAvailability;
use Estratos\DomainApiInterface\DTO\RegistrationResult;
use Estratos\DomainApiInterface\Request\RegisterDomainRequest;

final class YourDomainProvider implements DomainProviderInterface
{
    public function checkAvailability(string $domain): DomainAvailability
    {
        // Implementation
    }
    
    public function register(RegisterDomainRequest $request): RegistrationResult
    {
        // Implementation
    }
    
    // ... implement all other methods
}
Using a Provider in an Application
php
<?php

declare(strict_types=1);

use Estratos\DomainApiInterface\Domain\DomainProviderInterface;
use Estratos\DomainApiInterface\Request\RegisterDomainRequest;

final class DomainRegistrationService
{
    public function __construct(
        private readonly DomainProviderInterface $domainProvider
    ) {
    }
    
    public function registerDomain(string $domain, string $contactId): void
    {
        $availability = $this->domainProvider->checkAvailability($domain);
        
        if (!$availability->isAvailable()) {
            throw new \RuntimeException('Domain is not available');
        }
        
        $request = new RegisterDomainRequest(
            domain: $domain,
            years: 2,
            contactId: $contactId,
            private: true,
            autoRenew: true
        );
        
        $result = $this->domainProvider->register($request);
        
        if (!$result->isSuccess()) {
            throw new \RuntimeException('Registration failed: ' . $result->errorMessage);
        }
    }
}
Available Providers
Providers that implement these contracts:

estratos/namesilo-bundle - NameSilo integration

More providers coming soon

Testing
bash
composer test
PHPStan Analysis
bash
composer phpstan
Code Style
bash
composer php-cs-fixer
composer php-cs-fixer-fix
Contributing
Fork the repository

Create a feature branch

Make your changes

Run tests and style checks

Submit a pull request

License
MIT License. See the LICENSE file for details.

统计信息

  • 总下载量: 1
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-06-29