Modx REST API

Всем привет.

Подскажите — как правильно организовать REST API на MODX?
Поступила задача — сделать REST API для обмена данными с front-end приложением.

По следующим ссылкам — изучил инфу — (Извиняюсь за полотно, но хочу расписать вопрос подробно.)
Cоздал свою таблицу в БД
Сгенерировал компнент
Схему и модель

Через 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, как-то переопределяя его
его методы?
Илья Катасонов
08 декабря 2015, 17:36
modx.pro
6
6 167
0

Комментарии: 2

Алексей Карташов
09 декабря 2015, 19:12
+1
Здесь три варианта:
1. Использовать схему, как в miniShop2/Tickets/etc — написать плагин на событие OnHandleRequest, который будет отлавливать ajax-запросы, а дальше switch/case'ом рулить нужными экшенами. Гибко, но не системно.

2. Гуглите про коннеторы. Я их в своих компонентах никогда не использовал, но они именно для этого, по сути, и созданы (как минимум для админки точно. Для фронта может и не подойдёт). Принцип такой — на каждый restful чих пишется процессор, а на каждый процессор — по коннектору. ajax-запросы шлются на соответствующие файлы-коннекторы. Системно, но на каждый чих по файлу — это печаль.

3. Дождаться MODX 3, которая, вроде как, должна быть полностью restful :)
    Илья Катасонов
    10 декабря 2015, 18:17
    0
    Благодарю за отзыв, Алексей) Очень жаль, что нет возможности сделать всё родными средствами — я-то уже губу раскатал в предвкушении как всё аккуратно и красиво можно всё оформить X) Значит будем использовать то что есть и допиливать под себя.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2