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
все заработало
Рустам С
31 августа 2014, 21:59
modx.pro
8
6 828
0

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

Василий Наумкин
01 сентября 2014, 10:35
+1
Этому API уже больше двух лет, у нас через него репозиторий работает.

Проблем нет, с нагрузками справляется.
    Рустам С
    02 сентября 2014, 01:43
    0
    Отлично, но тогда может подскажите)))
    … получаю ошибку по адресу /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';
    }
      Алексей Ерохин
      02 сентября 2014, 09:37
      0
      uploadify not found!
      а Вас эта фраза вообще не наводит на мысли?
      store.simpledream.ru/packages/content/uploadify.html
        Рустам С
        02 сентября 2014, 11:59
        0
        компонент стоит и работает, я просто не понял что еще надо сделать… чтоб компонент начал видеть rest команды
        Василий Наумкин
        02 сентября 2014, 11:25
        0
        Ты хочешь сделать так, чтобы Uploadify каким-то волшебным образом без лишних телодвижений начал принимать REST команды?

        Сильно сомневаюсь, что так получится.
          Рустам С
          02 сентября 2014, 11:58
          0
          да)) я почему-то так подумал,
          Uploadify для теста просто хотел попробовать.
          а так нужно будет, свою отдельную таблицу в базе делать и компонент…

            Рустам С
            13 сентября 2014, 11:13
            0
            Удалите пожалуйста ссылку из поста
            modx.pro/help/3698/#comment-28674
            Евгений Дурягин
            02 сентября 2014, 13:46
            0
            У uploadify класс uFile и его нужно указывать в classKey, а не uploadify
              Рустам С
              02 сентября 2014, 23:58
              0
              Спасибо заработало!)) Значит «Uploadify каким-то волшебным образом без лишних телодвижений начал принимать REST команды!»
                Василий Наумкин
                03 сентября 2014, 14:09
                +2
                Круто, я про такое и не знал!

                Напиши про это статейку, я думаю, многим будет интересно.
                  Рустам С
                  03 сентября 2014, 15:51
                  +1
                  да, попробую как разберусь еще немного)
                  документации по этому вопросу вообще нет кроме тех двух ссылок((

                  а ведь это готовое решение чтоб делать бакэнд для мобильных приложений, на основе уже имеющихся сайтов…
            Рустам С
            08 сентября 2014, 02:29
            1
            0
            А ни как не могу понять, как правильно написать контроллер, чтоб он брал из таблицы через 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;
                }
            lex-online
            04 октября 2014, 15:51
            0
            подскажите пожалуйста каким образом авторизуется пользователь в API?
            Ключ API посылается в запросе, но далее с чем он сравнивается? схема авторизации пользователя в API не совсем понятна(
            lex-online
            03 октября 2014, 14:02
            0
            а возможно как то контроллер соорудить для регистрации пользователя? тобишь вызывать методы компонента Login… допереть не могу как сделать(
              Рустам С
              03 февраля 2015, 12:54
              0
              и меня сейчас тоже интересует… не разобрались? может кто подсказать как авторизацию через rest сделать
              nekto
              05 марта 2015, 23:09
              0
              Возможно ли выбирать отдельные колонки, а не все таблицу целиком?
              Пробую так:
              <?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, помогите пожалуйста.
                nekto
                05 марта 2015, 23:13
                0
                Так тоже не работает:
                $c->select('id');
                  Володя
                  05 марта 2015, 23:26
                  0
                  так у меня тоже неполучалось.
                  исключал в prepareListObject

                  public function prepareListObject(xPDOObject $object) {
                          $data = array();
                          $data['name'] = $object->name;
                          return $data;
                      }
                    nekto
                    05 марта 2015, 23:33
                    0
                    Спасибо! Но почему-то поле «content» не выводит.
                      Володя
                      05 марта 2015, 23:40
                      0
                      незнаю, у меня почему то выводит…
                      rest.vgrish.ru/rest/modresource
                        nekto
                        05 марта 2015, 23:42
                        1
                        0
                        Пишу
                        public function prepareListObject(xPDOObject $object) {
                                $data = array();
                                $data['id'] = $object->id;
                                $data['pagetitle'] = $object->pagetitle;
                                $data['content'] = $object->content;
                                return $data;
                            }
                        Не выводит…
                          nekto
                          05 марта 2015, 23:43
                          0
                          пишет null, хотя там далеко не null))
                            Володя
                            05 марта 2015, 23:46
                            0
                            хз, я сам ток в эт тему вникать стал… не шарю. но у меня вот так, результат есть
                            <?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;
                                }
                            
                            }
                              nekto
                              05 марта 2015, 23:54
                              0
                              Ясно, спасибо! А несколько контроллеров через один и тот же index.php пробовали делать?)
                                Володя
                                05 марта 2015, 23:57
                                0
                                так складывай их все в одну папку и все… в чем проблема? Или я чето не так понял?
                                  nekto
                                  06 марта 2015, 00:18
                                  0
                                  Да, все работает, это я туплю)
                                  А tv-хи не пробовали вместе вытаскивать?)
                                    nekto
                                    10 марта 2015, 22:26
                                    0
                                    Так никто не пробовал tv параметры вытаскивать вместе с ресурсам? не выходит никак…
                    nekto
                    22 октября 2015, 10:48
                    0
                    Здравствуйте!
                    А можно как-нибудь реализовать авторизацию на основе OAuth? Выдавать token. Может быть кто-нибудь уже пробовал?
                      but1head
                      26 декабря 2015, 04:21
                      0
                      Не получается получить Ticket. Просто выдает 500 ошибку.
                      _______/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';
                      }
                        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                        35