Система ответов KinopoiskDev предоставляет типизированные классы для обработки всех типов ответов от API kinopoisk.dev. Все классы ответов основаны на объектно-ориентированном подходе с полной типизацией и автоматической обработкой данных.
class BaseResponseDto extends BaseModel { #[ApiField(name: 'status')] public int $status; #[ApiField(name: 'message')] public string $message; #[ApiField(name: 'timestamp')] public string $timestamp;}
class BaseDocsResponseDto extends BaseResponseDto { #[ApiField(name: 'docs')] public array $docs; #[ApiField(name: 'total')] public int $total; #[ApiField(name: 'limit')] public int $limit; #[ApiField(name: 'page')] public int $page; #[ApiField(name: 'pages')] public int $pages;}
class ErrorResponseDto extends BaseResponseDto { #[ApiField(name: 'error')] public string $error; #[ApiField(name: 'errorCode')] public int $errorCode; #[ApiField(name: 'details')] public array $details;}
class UnauthorizedErrorResponseDto extends ErrorResponseDto { #[ApiField(name: 'error')] public string $error = 'Unauthorized'; #[ApiField(name: 'errorCode')] public int $errorCode = 401;}
class ForbiddenErrorResponseDto extends ErrorResponseDto { #[ApiField(name: 'error')] public string $error = 'Forbidden'; #[ApiField(name: 'errorCode')] public int $errorCode = 403;}
class NotFoundErrorResponseDto extends ErrorResponseDto { #[ApiField(name: 'error')] public string $error = 'Not Found'; #[ApiField(name: 'errorCode')] public int $errorCode = 404;}
<?phpuseKinopoiskDev\Responses\Api\MovieDocsResponseDto;useKinopoiskDev\Responses\Api\PersonDocsResponseDto;// Автоматическое создание из JSON ответа$jsonResponse='{"status":200,"docs":[...],"total":100,"limit":20}';$response=MovieDocsResponseDto::fromArray(json_decode($jsonResponse,true));// Доступ к даннымecho$response->status;// 200echo$response->total;// 100echocount($response->docs);// количество фильмов// Работа с документамиforeach($response->docsas$movie){echo$movie->name." (".$movie->year.")\n";}
<?phpuseKinopoiskDev\Http\MovieRequests;useKinopoiskDev\Responses\Api\MovieDocsResponseDto;useKinopoiskDev\Responses\Errors\UnauthorizedErrorResponseDto;$requests=newMovieRequests(apiToken:'your-token');try{$response=$requests->searchMovies($filter);// Автоматически создается MovieDocsResponseDtoforeach($response->docsas$movie){echo$movie->name."\n";}}catch(KinopoiskResponseException$e){if($e->getCode()===401){// Автоматически создается UnauthorizedErrorResponseDtoecho"Ошибка авторизации: ".$e->getMessage();}}
<?phpuseKinopoiskDev\Responses\Errors\UnauthorizedErrorResponseDto;useKinopoiskDev\Exceptions\KinopoiskResponseException;// Автоматическое создание исключения из ответа ошибки$errorResponse=UnauthorizedErrorResponseDto::fromArray($errorData);$exception=newKinopoiskResponseException(UnauthorizedErrorResponseDto::class,$previousException);// Информация из ответа автоматически извлекаетсяecho$exception->getMessage();// "Unauthorized"echo$exception->getCode();// 401
// Автоматическое создание из JSON$response = MovieDocsResponseDto::fromArray(json_decode($json, true));// Автоматическая валидация$response->validate();// Автоматическое создание исключенийthrow new KinopoiskResponseException(UnauthorizedErrorResponseDto::class);
// Все ответы имеют одинаковую структуру$response->status; // Статус ответа$response->message; // Сообщение$response->timestamp; // Временная метка// Все ответы с документами поддерживают пагинацию$response->docs; // Массив документов$response->total; // Общее количество$response->limit; // Лимит на страницу$response->page; // Текущая страница$response->pages; // Общее количество страниц