<?php declare(strict_types=1); class ApiResponse implements JsonSerializable { public const STATUS_OK = 200; public const STATUS_FORBIDDEN = 403; public const STATUS_UNAUTHORIZED = 401; public const STATUS_BAD_REQUEST = 400; public const STATUS_NOT_FOUND = 404; public const STATUS_SERVER_ERROR = 500; public const MIME_TYPE_PLAINTEXT = 'text/plain'; public const MIME_TYPE_JSON = 'application/json'; public const MIME_TYPE_SVG = 'image/svg+xml'; protected int $status = ServerStatus::OK; protected string $mimeType = MimeType::PLAINTEXT; protected array $parameters = []; public function __construct(int $status = ServerStatus::OK) { $this->setStatus($status); } public function setParameter(string $key, $value): void { $this->parameters[$key] = $value; } public function setStatus(int $status): void { $this->status = $status; } public function setMessage(string $message): void { $this->setParameter('message', $message); } public function setMimeType(string $mimeType): void { $this->mimeType = $mimeType; } public function setBody(JsonSerializable $data): void { $this->parameters = $data->jsonSerialize(); } public function SetMessageIdNotFound(string $instanceName): void { $this->setMessage(sprintf('Die für %s angeforderte ID existiert nicht!', $instanceName)); } public function getStatus(): int { return $this->status; } public function getMimeType(): string { return $this->mimeType; } public function jsonSerialize() { return $this->parameters; } public function respond(): void { http_response_code($this->status); header('Content-Type: ' . $this->mimeType); } }