Система контрактов KinopoiskDev предоставляет интерфейсы для обеспечения совместимости и расширяемости библиотеки. Все интерфейсы основаны на PSR стандартах для максимальной совместимости с экосистемой PHP.
interface CacheInterface { public function get(string $key): mixed; public function set(string $key, mixed $value, int $ttl): bool; public function delete(string $key): bool; public function has(string $key): bool; public function clear(): bool; public function getMultiple(array $keys): array; public function setMultiple(array $values, int $ttl): bool;}
Возможности:
Базовые операции CRUD для кэша
Поддержка TTL (время жизни)
Массовые операции (getMultiple, setMultiple)
Проверка существования ключей
Очистка всего кэша
Реализации:
Встроенный CacheService
Возможность подключения Redis, Memcached и других драйверов
interface LoggerInterface { public function debug(string $message, array $context = []): void; public function info(string $message, array $context = []): void; public function warning(string $message, array $context = []): void; public function error(string $message, array $context = []): void; public function critical(string $message, array $context = []): void;}
Возможности:
PSR-3 совместимость
Различные уровни логирования
Контекстная информация
Стандартизированный интерфейс
Реализации:
Встроенный логгер
Совместимость с Monolog, Psr\Log и другими PSR-3 логгерами
<?phpuseKinopoiskDev\Contracts\CacheInterface;useKinopoiskDev\Kinopoisk;classRedisCacheimplementsCacheInterface{privateRedis$redis;publicfunction__construct(Redis$redis){$this->redis=$redis;}publicfunctionget(string$key):mixed{return$this->redis->get($key);}publicfunctionset(string$key,mixed$value,int$ttl):bool{return$this->redis->setex($key,$ttl,serialize($value));}// ... остальные методы}// Использование с KinopoiskDev$redis=newRedis();$redis->connect('127.0.0.1',6379);$cache=newRedisCache($redis);$kinopoisk=newKinopoisk(apiToken:'token',cache:$cache);
<?phpuseKinopoiskDev\Contracts\LoggerInterface;useKinopoiskDev\Kinopoisk;classCustomLoggerimplementsLoggerInterface{publicfunctiondebug(string$message,array$context=[]):void{echo"[DEBUG] {$message}\n";}publicfunctioninfo(string$message,array$context=[]):void{echo"[INFO] {$message}\n";}publicfunctionwarning(string$message,array$context=[]):void{echo"[WARNING] {$message}\n";}publicfunctionerror(string$message,array$context=[]):void{echo"[ERROR] {$message}\n";}publicfunctioncritical(string$message,array$context=[]):void{echo"[CRITICAL] {$message}\n";}}// Использование с KinopoiskDev$logger=newCustomLogger();$kinopoisk=newKinopoisk(apiToken:'token',logger:$logger);
use KinopoiskDev\Services\CacheService;$cache = new CacheService();$kinopoisk = new Kinopoisk(apiToken: 'token', cache: $cache);// Кэширование автоматически работает для всех запросов$movie = $kinopoisk->getMovieById(301); // Результат кэшируется
// Единый интерфейс для всех кэш-драйверовinterface CacheInterface { public function get(string $key): mixed; public function set(string $key, mixed $value, int $ttl): bool;}
// Легкая замена реализации$kinopoisk = new Kinopoisk( apiToken: 'token', cache: new RedisCache($redis), // Redis logger: new MonologLogger() // Monolog);