Пользовательский ответ REST API Magento в формате JSON

0

Для Magento 1.9 я работаю над модулем, где я определил настраиваемый маршрут REST для получения всех категорий с подкатегориями. Когда я вызываю <MAGE>/api/rest/eoarestapi/categories?type=rest _retrieveCollection() функция _retrieveCollection() из класса Namespace_Restapi_Model_Api2_Category_Rest_Guest_V1. Все идет нормально.

Теперь у меня возникла проблема, что он возвращает ответ только в XML и когда я устанавливаю заголовок явно в Accept: application/json, тогда я получаю ошибку 406 Не приемлемо. Соответствующее представление запрашиваемого ресурса /api/rest/products не удалось найти на этом сервере. Доступные варианты: api.php, тип application/x-httpd-php

Это кажется мне очень странным, так как я помню, как я работал с JSON-ответом в Magento 1.8.

В качестве исправления я нашел это и это решение для извлечения JSON, который работает, но он не кажется хорошим решением, поскольку похоже, что он полностью отключает ответ XML.

Есть ли лучший способ включить вывод JSON из REST API в Magento 1.9? Кто-нибудь знает об этом?

Теги:
rest
magento
magento-1.9

1 ответ

0

Я достиг этого, переопределив мою модель запроса. Мои шаги следующие:

1: объявить новый модуль: создать приложение /etc/modules/Custom_RestJson.xml

<?xml version="1.0"?>
<config>
<modules>
<Custom_RestJson>
<active>true</active>
<codePool>local</codePool>
</Custom_RestJson>
</modules>
</config>

2. Создайте /app/code/local/Custom/RestJson/etc/config.xml.

<?xml version="1.0"?>
<config>
<modules>
<Custom_RestJson>
<version>1.0.0</version>
</Custom_RestJson>
</modules>
<global>
<models>
<Custom_RestJson>
<class>Custom_RestJson_Model</class>
</Custom_RestJson>
<api2>
<rewrite>
<request>Core_Mage_Api2_Model_Request</request>
</rewrite>
</api2>
</models>
</global>
</config>

3. Создайте /app/code/local/Custom/RestJson/Model/Api2/Request.php

<?php
class Custom_RestJson_Model_Api2_Request extends Mage_Api2_Model_Request{

public function getAcceptTypes()
{
$qualityToTypes = array();
$orderedTypes = array();

foreach (preg_split('/,\s*/', $this->getHeader('Accept')) as $definition) {
$typeWithQ = explode(';', $definition);
$mimeType = trim(array_shift($typeWithQ));

// check MIME type validity
if (!preg_match('~^([0-9a-z*+\-]+)(?:/([0-9a-z*+\-\.]+))?$~i', $mimeType)) {
continue;
}
$quality = '1.0'; // default value for quality

if ($typeWithQ) {
$qAndValue = explode('=', $typeWithQ[0]);

if (2 == count($qAndValue)) {
$quality = $qAndValue[1];
}
}
$qualityToTypes[$quality][$mimeType] = true;
}
krsort($qualityToTypes);

foreach ($qualityToTypes as $typeList) {
$orderedTypes += $typeList;
}

return array_keys(array("application/json" => 1));
}

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню