RESTful APIs на MODX 2.3
        Есть интересная новинка в 2.3
для создания api на REST.
rtfm.modx.com/revolution/2.x/developing-in-modx/advanced-development/developing-rest-servers
Кто уже работал, можете поделиться впечатлениями? как в работе с нагрузками.
Кто как использует.
Мало очень документации, интересны уроки…
когда делал по документации, были проблемы…
сделал по этому примеру (в комментах pixelchutes) gist.github.com/splittingred/2346752
все заработало
    
    
                                                                                
            для создания api на REST.
rtfm.modx.com/revolution/2.x/developing-in-modx/advanced-development/developing-rest-servers
Кто уже работал, можете поделиться впечатлениями? как в работе с нагрузками.
Кто как использует.
Мало очень документации, интересны уроки…
когда делал по документации, были проблемы…
сделал по этому примеру (в комментах pixelchutes) gist.github.com/splittingred/2346752
все заработало
Комментарии: 35
                Этому API уже больше двух лет, у нас через него репозиторий работает.
Проблем нет, с нагрузками справляется.
                    Проблем нет, с нагрузками справляется.
                Отлично, но тогда может подскажите)))
… получаю ошибку по адресу /rest/box/1
{«message»:«uploadify not found!»,«object»:[],«success»:false}
вот код index.php
                    … получаю ошибку по адресу /rest/box/1
{«message»:«uploadify not found!»,«object»:[],«success»:false}
вот код index.php
<?php
// Boot up MODX
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/uploadify/';
$modx->addPackage('uploadify', $path . 'model/','modx_');
// Load the modRestService class and pass it some basic configuration
$rest = $modx->getService('rest', 'rest.modRestService', '', array(
    'basePath' => dirname(__FILE__) . '/Controllers/',
    'controllerClassSeparator' => '',
    'controllerClassPrefix' => 'MyController',
    'xmlRootNode' => 'response',
));
// Prepare the request
$rest->prepare();
// Make sure the user has the proper permissions, send the user a 401 error if not
if (!$rest->checkPermissions()) {
    $rest->sendUnauthorized(true);
}
// Run the request
$rest->process();В Controllers/Box.php<?php
/**
 * Found at: Controllers/Box.php
 */
class MyControllerBox extends modRestController {
    public $classKey = 'uploadify';
    public $defaultSortField = 'name';
    public $defaultSortDirection = 'DESC';
}            uploadify not found! а Вас эта фраза вообще не наводит на мысли?store.simpledream.ru/packages/content/uploadify.html
                компонент стоит и работает, я просто не понял что еще надо сделать… чтоб компонент начал видеть rest команды            
                    
                Ты хочешь сделать так, чтобы Uploadify каким-то волшебным образом без лишних телодвижений начал принимать REST команды?
Сильно сомневаюсь, что так получится.
                    Сильно сомневаюсь, что так получится.
                да)) я почему-то так подумал, 
Uploadify для теста просто хотел попробовать.
а так нужно будет, свою отдельную таблицу в базе делать и компонент…
            
                    Uploadify для теста просто хотел попробовать.
а так нужно будет, свою отдельную таблицу в базе делать и компонент…
                Удалите пожалуйста ссылку из поста
modx.pro/help/3698/#comment-28674
                    modx.pro/help/3698/#comment-28674
                У uploadify класс uFile и его нужно указывать в classKey, а не uploadify            
                    
                Спасибо заработало!)) Значит «Uploadify каким-то волшебным образом без лишних телодвижений начал принимать REST команды!»            
                    
                Круто, я про такое и не знал!
Напиши про это статейку, я думаю, многим будет интересно.
                    Напиши про это статейку, я думаю, многим будет интересно.
                да, попробую как разберусь еще немного)
документации по этому вопросу вообще нет кроме тех двух ссылок((
а ведь это готовое решение чтоб делать бакэнд для мобильных приложений, на основе уже имеющихся сайтов…
                    документации по этому вопросу вообще нет кроме тех двух ссылок((
а ведь это готовое решение чтоб делать бакэнд для мобильных приложений, на основе уже имеющихся сайтов…
                А ни как не могу понять, как правильно написать контроллер, чтоб он брал из таблицы через where условие status=1
пробывал так, как в процессорах, но не вышло
                    class MyControllerVideolast extends modRestController {
    public $classKey = 'lfvideoItem';
    public $defaultSortField = 'id';
    public $defaultSortDirection = 'DESC';
    public $defaultLimit = '1';
}вот такой код выдает последний загруженный файл, а еще необходимо фильтровать по статусу…пробывал так, как в процессорах, но не вышло
public function prepareQueryBeforeCount(xPDOQuery $c) {
           $c = parent::prepareQueryBeforeCount($c);
            $c->where(array(
                'status' => '1'
            ));
        
        return $c;
    }            
                В modRestController перегружать нужно prepareListQueryBeforeCount github.com/modxcms/revolution/blob/master/core/model/modx/rest/modrestcontroller.class.php#L451            
                    
                спасибо большое, попробую            
                    
                я еще задал вопрос другой, на форуме модекса)
forums.modx.com/thread/93040/rest-api---update-items-put-how#dis-post-508247
я так понял, вы хорошо разбираетесь)
подскажите пожалуйста как через PUT обновлять статус — status=1
щас вроде запрос проходит, но значение не меняется просто
cropme.ru/13260b073b041b2eeb963a53b1079270
                    forums.modx.com/thread/93040/rest-api---update-items-put-how#dis-post-508247
я так понял, вы хорошо разбираетесь)
подскажите пожалуйста как через PUT обновлять статус — status=1
щас вроде запрос проходит, но значение не меняется просто
cropme.ru/13260b073b041b2eeb963a53b1079270
                На первый вид вроде все правильно. Разве что на скриншоте не видно какой метод вы выполняете. Там точно стоит PUT, а не GET?            
                    
                да я там все перепробовал, это точно PUT
вот адрес up.lifefilm.ru/rest/video/30 (удалю завтра ссылку)
                    вот адрес up.lifefilm.ru/rest/video/30 (удалю завтра ссылку)
                все нормально работает, оказывается просто POSTMAN нормально не работал, на другом приложении все норм. спасибо            
                    
                подскажите пожалуйста каким образом авторизуется пользователь в API?
Ключ API посылается в запросе, но далее с чем он сравнивается? схема авторизации пользователя в API не совсем понятна(
                    Ключ API посылается в запросе, но далее с чем он сравнивается? схема авторизации пользователя в API не совсем понятна(
                а возможно как то контроллер соорудить для регистрации пользователя? тобишь вызывать методы компонента Login… допереть не могу как сделать(            
                    
                и меня сейчас тоже интересует… не разобрались? может кто подсказать как авторизацию через rest сделать            
                    
                Возможно ли выбирать отдельные колонки, а не все таблицу целиком?
Пробую так:
                    Пробую так:
<?php
class ResourceControllerResource extends modRestController {
    
    public $classKey = 'modResource';
    public $defaultSortField = 'id';
    public $defaultSortDirection = 'ASC';
    
    
    public function prepareListQueryBeforeCount(xPDOQuery $c) {
        
      
    $c->select($this->modx->getSelectColumns('site_content','site_content','zx_', array('id','pagetitle')));
      
    
    return $c;
}
return 'ResourceControllerResource';Но ничего не работает. И возможно ли использовать несколько контроллеров с одним index.php, помогите пожалуйста.            
                Так тоже не работает:
                    $c->select('id');            
                так у меня тоже неполучалось.
исключал в prepareListObject
                    исключал в prepareListObject
public function prepareListObject(xPDOObject $object) {
        $data = array();
        $data['name'] = $object->name;
        return $data;
    }            
                Спасибо! Но почему-то поле «content» не выводит.            
                    
                незнаю, у меня почему то выводит…
rest.vgrish.ru/rest/modresource
                    rest.vgrish.ru/rest/modresource
                Пишу 
                    public function prepareListObject(xPDOObject $object) {
        $data = array();
        $data['id'] = $object->id;
        $data['pagetitle'] = $object->pagetitle;
        $data['content'] = $object->content;
        return $data;
    }Не выводит…            
                пишет null, хотя там далеко не null))            
                    
                хз, я сам ток в эт тему вникать стал… не шарю. но у меня вот так, результат есть
                    <?php
/**
 * Found at: Controllers/Modresource.php
 */
class MyControllerModresource extends modRestController {
    public $classKey = 'modResource';
    public $defaultSortField = 'id';
    public $defaultSortDirection = 'DESC';
    public function prepareListObject(xPDOObject $object) {
        
        $data = array();
        $data['pagetitle'] = $object->pagetitle;
        $data['content'] = $object->content;
        return $data;
    }
}            
                Ясно, спасибо! А несколько контроллеров через один и тот же index.php пробовали делать?)            
                    
                так складывай их все в одну папку и все… в чем проблема? Или я чето не так понял?            
                    
                Да, все работает, это я туплю)
А tv-хи не пробовали вместе вытаскивать?)
                    А tv-хи не пробовали вместе вытаскивать?)
                Так никто не пробовал tv параметры вытаскивать вместе с ресурсам? не выходит никак…            
                    
                Здравствуйте!
А можно как-нибудь реализовать авторизацию на основе OAuth? Выдавать token. Может быть кто-нибудь уже пробовал?
                    А можно как-нибудь реализовать авторизацию на основе OAuth? Выдавать token. Может быть кто-нибудь уже пробовал?
                Не получается получить Ticket. Просто выдает 500 ошибку.
_______/rest/box/13 (id тикета)
причем ticketsection или modresource отлично получает.
ngix
                    _______/rest/box/13 (id тикета)
причем ticketsection или modresource отлично получает.
ngix
location /rest/ {
  if (!-e $request_filename){
          rewrite ^/rest/(.*)$ /rest/index.php?_rest=$1;
  }
  if (-e $request_filename){
          rewrite ^/rest/(.*)$ /rest/index.php;
  }
}rest/Controllers/index.php<?php
require_once dirname(dirname(__FILE__)) . '/config.core.php';
require_once MODX_CORE_PATH . 'model/modx/modx.class.php';
$modx = modX::getInstance('rest');
$path = MODX_CORE_PATH . 'components/tickets/';
$modx->addPackage('tickets', $path . 'model/');
$rest = $modx->getService('rest','rest.modRestService','',array(
    'basePath' => dirname(__FILE__).'/Controllers/',
    'controllerClassSeparator' => '',
    'controllerClassPrefix' => 'myControllers',
    'xmlRootNode' => 'response',
));
$rest->prepare();
if (!$rest->checkPermissions()) {
    $rest->sendUnauthorized(true);
}
$rest->process();rest/Controllers/Box.php<?php
/**
 * Found at: Controllers/Box.php
 */
class myControllersBox extends modRestController {
    public $classKey = 'Ticket';
    public $defaultSortField = 'name';
    public $defaultSortDirection = 'DESC';
}            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.