2015-01-16 2 views
0

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

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

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

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

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

ответ

0

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

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

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

2. Создание/приложения/код/​​местные/Пользовательский/RestJson/и т.д. /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)); 
} 

} 
Смежные вопросы