REST запросы

Для работы с модулем по средствам архитектурного стиля REST api в корень модуля нужно добавить файл api контроллер. Такой файл должен называться начиная с Mod, далее название модуля и Api.php, например ModOrdersApi.php. Внутри файла должен находиться класс с таким же названием, например ModOrdersApi.

Для обработки REST запросов, внутри api класса ДОЛЖНЫ находиться публичные методы, названия которых начинается на action_ и далее название субмодуля или index, например action_index. Авторизованные запросы будет попадать в такие методы, если у роли пользователя достаточно прав на доступ к ним. Метод action_index является методом главной страницы и он доступен если есть доступ к модулю.

Чтобы запросы были обработаны модулем, они ДОЛЖНЫ иметь адрес начинающийся на название модуля и далее субмодуля (или index). Например https://host.com/orders/index чтобы запрос обработал метод action_index или https://host.com/orders/example чтобы его обработал метод action_example. Важно, если субмодуль не зарегистрирован в системе, то метод с его названием не будет открыт, даже если он будет существовать.

При попадании запроса в необходимый метод РЕКОМЕНДУЕТСЯ использовать системный класс \Core2\Routing\Router для его обработки и ответа. Описание работы с этим классом можно посмотреть в соответствующем разделе документации.

После добавления обработки соответствующих роутов их требуется описать в файле schema.json. Файл содержит json в формате openapi. Роуты добавленные в него будут доступны в swagger и scalar системы. Их можно открыть для просмотра по адресу https://example.com/core2/swagger/index.html или https://example.com/core2/scalar/index.html.

Пример содержимого файла

require_once DOC_ROOT . "core2/inc/classes/CommonApi.php";
require_once DOC_ROOT . "core2/inc/classes/Routing/Router.php";

/**
 * 
 */
class ModOrdersApi extends CommonApi {

    /**
     * @return mixed
     * @throws Zend_Db_Table_Exception
     * @throws Exception
     */
    public function action_index(): mixed {

        $router = new \Core2\Routing\Router('/orders/index', [
            ''                  => ['get' => [Api\Index::class, 'getOrders']],
            '/order'            => ['post' => [Api\Order::class, 'createOrder']],
            '/order/{order_id}' => [
                'get'    => [Api\Order::class, 'getOrder'],
                'patch'  => [Api\Order::class, 'patchOrder'],
                'delete' => [Api\Order::class, 'deleteOrder'],
            ]
        ]);

        return $this->runRouter($router);
    }


    /**
     * @return mixed
     * @throws Exception
     */
    public function action_example(): mixed {

        $router = new \Core2\Routing\Router('/orders/example', [
            '/test' => ['post' => [Api\Example::class, 'testMethod']],
        ]);

        return $this->runRouter($router);
    }
}