Estou assumindo que AppFactory\Core\Api\SettingInterface::get()
é um ponto de extremidade REST. Nesse caso, nos comentários do phpdoc, você precisa definir o que isso retornará. O manipulador REST Magento pega esse valor e o processa para remover todos os dados desnecessários. O que resta será codificado em JSON, portanto, em javascript, você pode recuperá-lo como hash JS já adequado e não como uma string codificada por json.
O truque sobre esses pontos de extremidade é que você precisa definir com muita precisão o que retornará. O Magento não será capaz de processar algo tão geral como "array", onde você definirá o que quiser.
No seu caso, para não tentar jogar com uma série de cadeias, será mais fácil criar uma interface que seu endpoint retornará.
<?php
namespace AppFactory\Core\Api;
/**
* @api
*/
interface SettingsInterface
{
/**
* @return Data\SettingsInterface
*/
public function get();
}
Agora, quando você retornar uma instância de um objeto implementando essa interface, o Magento lerá seus phpdocs e processará seus valores de retorno. Agora crie um arquivo da AppFactory\Core\Api\Data\SettingsInterface
seguinte maneira
<?php
namespace AppFactory\Core\Api\Data;
interface SettingsInterface
{
/**
* @return int[]
**/
public function getSettings();
/**
* @return string[]
**/
public function getExtra();
}
Agora, quando você cria uma classe real que implementará esses 2 métodos get e você a retornará, o AppFactory\Core\Api\SettingsInterface::get()
magento retornará algo como
{
"settings": [1, 2, 5],
"extra": ["my","array","of","strings"]
}
Se você quiser outro nível, precisará criar outra interface que mantenha a settings
estrutura e a adicione como valor de retorno AppFactory\Core\Api\Data\SettingsInterface::getSettings()
.
Se você precisar de algo que seja dinâmico e não desejar ou não puder preparar essa interface de estrutura, tente definir a string codificada por json e o local @return string
para qualquer um dos campos. Dessa forma, porém, você precisará decodificar manualmente essa sequência após receber a resposta, pois sua resposta será semelhante a esta:
{
"settings": [1, 2, 5],
"extra": "{\"test\":\"string\",\"value\":8}"
}
e para usar response.extra.test
você terá que primeiro fazer response.extra = JSON.parse(response.extra);
manualmente