Быстрое создание API на MIND-CMS
Исходные данные:
1. У нас есть некая БД, в которой лежит некий набор данных, которые мы хотим отдавать в виде REAT API в JSON формате.
Для примера, возьмем простую таблицу histrorian вида:
Считаем, что на начало работ, у нас есть только таблица с данными и все.
Реализация:
И так в целом мы можем решить задачу по сути в одну строку, но дальнейшая поддержка будет не очень удобной. Поэтому реализуем на примере создания полноценного модуля:
1. Создаем папку api по пути /system/modules. В итоге у нас должна появиться папка /system/modules/api/
2. Далее в модуле api на нужны:
2.1. Контроллер, например /system/modules/api/controllers/index.php
2.2. Модель для работы с данными, можно и без нее, но поддержка будет сложнее в будущем, поэтому создадим модель /system/modules/api/models/Historian.php. Если модель будете создавать через GKG то файл создавать не надо.
2.3. И для того чтобы модуль завелся нам понадобится файл прав /system/modules/api/rights.php
3. После создания эти файлов мы получим файловую структуру вида:
4. В модели нам надо описать структуру таблица. Для этого можно описать ее руками, а можно воспользоваться модулем GKG. С его помощью сформируем модель менее чем за минуту. Для этого:
4.1. заходим в модуль GKG по адресу /gkg/admin. И нажимаем кнопку "создать модуль"
4.2. в новом окне выбираем "название таблицы" -> historian
4.3. вводим название модели "Historian".
4.4. поле "название модуля" вводим "api" (как называется ваш модуль)
4.4. остальные поля не трогаем и жмем "сохранить".
В результате в папке у вас создастся модель со следующим содержимым:
namespace modules\api\models;
use core\Model;
/**
* Class Historia
*
* @property string id - Первичный ключ
* @property string mod_key - ключ доступа к истории
* @property string value - значение которые были
* @property string create_at - дата обновления
* @property string user_id - кто изменил
* @property string row_key - ключ записи модуля
*/
class Historian extends Model
{
public $table = 'historian';
public function factory($id = false)
{
if ($id == false or !$this->getOne($id)) {
$this->id = "";
$this->mod_key = 'null';
$this->value = 'null';
$this->create_at = "";
$this->user_id = 'null';
$this->row_key = 'null';
}
return $this;
}
}
Обратите внимание, что gkg создал не просто модель, но и подтянул описание комментариев из таблицы и создал фабрику.
ВАЖНО: если файл уже был создан, то gkg проигнорирует создание, тем самым не трогая ВАШ файл.
5. Наполним контроллер, который будет считывать нам все записи из таблицы Historian через модель и отдавать в видe массива объектов в JSON.
namespace modules\api\controllers;
use core\Controller;
use modules\api\models\Historian;
class index extends Controller
{
public function actionIndex()
{
return Historian::instance()->getAll();
}
}
Если мы сейчас попробуем запросить апи по адресу /api то увидим, что ничего не работает. Нам не хватает прав на модуль
6. Наполним rights.php
return [
'index' => [ // контролер
'role' => ['*'],
// кому разрешен доступ к контролеру
],
];
DONE
Мы закончили создание апи. Если откроем ссылку /api. То увидим:
[
{
"id": "1",
"mod_key": "2",
"value": "new value",
"create_at": "2023-11-18 20:52:43",
"user_id": "15",
"row_key": "new row"
}
]
Иными словами, мы получили что хотели. При этом с помощю поведения модели, мы можем ограничивать результат, добавлять условия выборки и многое другое.
С помощью rights.php мы можем регулировать уровень доступа к api. Назначая свои роли на доступ к разным экшенам контроллера.
Итого на создание простого REST АПИ у нас ушло менее 10 минут. При наличии БД. Если же БД нет, то времени все равно займет очень не много.