Прежде всего читаем официальную доку:
http://kb.x-cart.com/display/XDD/REST+API+documentation вполне возможно, что информация там уже куда более новая и дополненная, ну а это... это я пишу для себя.
1. Прежде всего важно, что можно получать не только
product,
user and
order entities, но и другие, ровно точно так же, например, передав &_path=address/22 вернет нам адрес с его ID=22.
2. REST API X-Cart (в 5.1.10 - точно) может отдавать данные не только JSON, но и XML, для этого нам нужно просто WebRequest.Accept присвоить значение 'application/xml', но какого то практического смысла я в этом не нашел (хотя с XML работал много и привык).
3. Мы можем выбирать данные с ЛЮБЫМИ условиями, для этого нам надо уметь их передать... это делается так:
http:
&_cnd[orderNumber]=3
Если нам нужно передать больше параметров, то передаем их как массив...
...&
_cnd[orderNumber][0]=3&
_cnd[orderNumber][1]=8
Какие же выборки мы можем делать?
Идем в папку xcart\classes\XLite\Model\Repo - вот какие классы мы тут видим, те мы и можем выбирать, по крайней мере для меня это кажется логичным.
Далее, какие условия для фильтрации данных нам доступны? Смотрим код интересующего нас класса - видим блок
/**
* Allowable search params
*/
Это оно. Например для Currency доступно два параметра
const SEARCH_ORDER_BY = 'orderBy';
const SEARCH_LIMIT = 'limit';
а гдето ниже по коду мы найдем два соответствующих метода... да, есть такие! например
protected function prepareCndOrderBy(\Doctrine\ORM\QueryBuilder $queryBuilder, array $value, $countOnly)
{
if (!$countOnly) {
list($sort, $order) = $this->getSortOrderValue($value);
$queryBuilder->addOrderBy($sort, $order);
}
}
интереснее конечно выборки например для ордеров
protected function prepareCndOrderMore(\Doctrine\ORM\QueryBuilder $queryBuilder, $value)
{
if (!empty($value)) {
$queryBuilder->andWhere('o.order_id > :orderMore')
->setParameter('orderMore', $value);
}
}
а вызывать мы его будем как
........&_path=order&_cnd[orderMore]=value
важно только не забыть (я поначалу забыл) прописать
const ORDER_MORE = 'orderMore';
protected function getHandlingSearchParams()
{
$params = parent::getHandlingSearchParams();
$params[] = self::ORDER_MORE;
return $params;
}
разумеется все это кладем в
abstract class Order extends \XLite\Model\Repo\Order implements \XLite\Base\IDecorator
{
.....
в соответствующий файл (в нашем случае - Order.php) в папку /Model/Repo вашего модуля.