* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved. * @license GNU General Public License version 3 or later; see LICENSE * * REST API endpoints — wire-compatible with the mcp_mokosuitebackup MCP server. * * Akeeba-compatible routes: * POST /api/index.php/v1/mokosuitebackup/backup — Start backup * GET /api/index.php/v1/mokosuitebackup/backups — List records * DELETE /api/index.php/v1/mokosuitebackup/backup/:id — Delete record * GET /api/index.php/v1/mokosuitebackup/backup/:id/download — Download archive * GET /api/index.php/v1/mokosuitebackup/profiles — List profiles */ namespace Joomla\Plugin\WebServices\MokoSuiteBackup\Extension; defined('_JEXEC') or die; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\CMS\Router\ApiRouter; use Joomla\Event\Event; use Joomla\Event\SubscriberInterface; use Joomla\Router\Route; final class MokoSuiteBackupWebServices extends CMSPlugin implements SubscriberInterface { protected $autoloadLanguage = true; public static function getSubscribedEvents(): array { return [ 'onBeforeApiRoute' => 'onBeforeApiRoute', ]; } public function onBeforeApiRoute(Event $event): void { /** @var ApiRouter $router */ [$router] = array_values($event->getArguments()); $defaults = [ 'component' => 'com_mokosuitebackup', 'public' => false, ]; // Standard CRUD for backup records $router->createCRUDRoutes('v1/mokosuitebackup/backups', 'backups', $defaults); // Start a backup (POST) $router->addRoute( new Route( ['POST'], 'v1/mokosuitebackup/backup', 'backups.backup', [], $defaults ) ); // Delete a backup (DELETE) $router->addRoute( new Route( ['DELETE'], 'v1/mokosuitebackup/backup/:id', 'backups.delete', ['id' => '(\d+)'], $defaults ) ); // Download a backup archive (GET) $router->addRoute( new Route( ['GET'], 'v1/mokosuitebackup/backup/:id/download', 'backups.download', ['id' => '(\d+)'], $defaults ) ); // List backup profiles (GET) $router->addRoute( new Route( ['GET'], 'v1/mokosuitebackup/profiles', 'backups.profiles', [], $defaults ) ); } }