Modx REST API
Всем привет.
Подскажите — как правильно организовать REST API на MODX?Поступила задача — сделать REST API для обмена данными с front-end приложением.
По следующим ссылкам — изучил инфу —
- modx.pro/help/3698/
- gist.github.com/splittingred/2346752
- bobsguides.com/custom-db-tables.html
- rtfm.modx.com/revolution/2.x/developing-in-modx/advanced-development/developing-rest-servers
Сгенерировал компнент
Схему и модель
Через Console с modx API проверил работу компонента — объекты моего компонента успешно созданы,
выводятся, добавляются.
Создал директорию для api с файлом index.php следующего содержания
—
<?php
require_once dirname(dirname(__FILE__)).'/config.core.php';
require_once MODX_CORE_PATH . 'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('web');
$modx->getService('error','error.modError', '', '');
$modx = modX::getInstance('rest');
$path = MODX_CORE_PATH . 'components/lb/';
$modx->addPackage('lookbuilder', $path . 'model/','modx_lb_');
$rest = $modx->getService('rest','rest.modRestService','',array(
'basePath' => dirname(__FILE__).'/Controllers/',
'controllerClassSeparator' => '',
'controllerClassPrefix' => 'controllers',
'xmlRootNode' => 'response',
));
$rest->prepare();
if (!$rest->checkPermissions()) {
$rest->sendUnauthorized(true);
}
$rest->process();
Создал простой контроллер для вывода своих объектов — class controllersSets extends modRestController {
// Base params
public $classKey = 'Sets';
public $defaultSortField = 'id';
public $defaultSortDirection = 'ASC';
}
Протестировал через POSTMAN запросы вида —
GET http://modxtest.dev/api/sets/1/?limit=1
— успешно проходят, возвращая нужный json — {
"message": "",
"object": {
"id": 1,
"user_id": 1,
"title": "Title 1",
"composition": "Composition 1",
"image": "Image 1",
"createdon": "0000-00-00 00:00:00",
"editedon": "2015-12-08 16:34:41"
},
"success": true
}
И теперь — главное) Куда грести дальше? Я облазил весь гугл в поисках примеров по restapi modx'a — и информации — кот наплакал. По сути — те 4 ссылки, что я привел — вот и вся инфа.Что делать, если мне необходима вложенная структура запроса, в виде —
// извлечение категории каталога
GET modxtest.dev/api/catalog/12
//извлечение товаров из категории с id 12
GET modxtest.dev/api/catalog/12/items
//извлечение товара с id 56 из категории с id 12
GET modxtest.dev/api/catalog/12/items/56
?Как отловить эти запросы и как организовать контроллеры?
И есть ли где-то более подробная инфа — возможно я что-то упустил из виду?
Извиняюсь, если вопрос нубский, но за 2 дня гугления не удалось найти ни примеров ни толковой документации. Буду рад любой информации.
Если гуглить просто документацию по restful — по-большей части попадается просто описание самой методики, а не практика. Либо примеры для иных языков/платформ.
Еще как вариант —
gist.github.com/splittingred/4689218
— вот эта заметка. Но, как я понял, она для клиентской стороны — для отправки REST запросов
на сервер
Либо — необходимо ковырять родительский класс modRestController, как-то переопределяя его
его методы?
Комментарии: 2
Здесь три варианта:
1. Использовать схему, как в miniShop2/Tickets/etc — написать плагин на событие OnHandleRequest, который будет отлавливать ajax-запросы, а дальше switch/case'ом рулить нужными экшенами. Гибко, но не системно.
2. Гуглите про коннеторы. Я их в своих компонентах никогда не использовал, но они именно для этого, по сути, и созданы (как минимум для админки точно. Для фронта может и не подойдёт). Принцип такой — на каждый restful чих пишется процессор, а на каждый процессор — по коннектору. ajax-запросы шлются на соответствующие файлы-коннекторы. Системно, но на каждый чих по файлу — это печаль.
3. Дождаться MODX 3, которая, вроде как, должна быть полностью restful :)
1. Использовать схему, как в miniShop2/Tickets/etc — написать плагин на событие OnHandleRequest, который будет отлавливать ajax-запросы, а дальше switch/case'ом рулить нужными экшенами. Гибко, но не системно.
2. Гуглите про коннеторы. Я их в своих компонентах никогда не использовал, но они именно для этого, по сути, и созданы (как минимум для админки точно. Для фронта может и не подойдёт). Принцип такой — на каждый restful чих пишется процессор, а на каждый процессор — по коннектору. ajax-запросы шлются на соответствующие файлы-коннекторы. Системно, но на каждый чих по файлу — это печаль.
3. Дождаться MODX 3, которая, вроде как, должна быть полностью restful :)
Благодарю за отзыв, Алексей) Очень жаль, что нет возможности сделать всё родными средствами — я-то уже губу раскатал в предвкушении как всё аккуратно и красиво можно всё оформить X) Значит будем использовать то что есть и допиливать под себя.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.