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';
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.