Как создать данные и вернуть должным образом отформатированный JSON, используя ApiGility и RPC

Я использую RPC-сервис ApiGilty для возврата некоторых данных. Я хотел бы дважды проверить, является ли это правильным способом форматирования и возврата данных, так как я не уверен на 100% в правильном процессе.

РЕДАКТИРОВАТЬ: уточнить
Данные строятся из нескольких объектов:

main
main_extra
main_data
main_data_days
main_data_tiers

Есть ли способ попасть в основной и получить все дочерние объекты? В настоящее время я строю свои данные с нуля и возвращаю массив.

Мой RPC контроллер выглядит следующим образом:

use My\Data\Controller\DataInterface;
use Zend\Mvc\Controller\AbstractActionController;
use ZF\ContentNegotiation\ViewModel;

class MyDataController extends AbstractActionController
{
const GENERAL_ERROR = 'api.rpc.my-data.my-data-controller';

public function __construct(
MyDataInterface $myData
)
{
$this->myData = $myData;
}public function myDataAction()
{

$my_id    = (int) $this->params()->fromRoute('my_id', 0);

if ($my_id == 0)
{
$data = $this->myData->getMyData();
} else
{
$data = $this->myData->getMyData($my_id);
}

$result = new ViewModel(array(
'data' => $data
));

return $result;

}

}

Теперь для создания данных я делаю что-то вроде этого:

public function getMyData( $my_id = null )
{
$returnArray = [];

$array1 = [
'key_1' => [1,2,3,4],
'key_2' => '123',
'key_3' => ['a','b','c']
];

$array2 = [
'key_1' => [1,2,3,4,5,6,7,8],
'key_2' => '123456',
'key_3' => ['a','b','c','d']
];

if ($my_id == 1) {
$array3 = ['some','or','other'];
} else {$array3 = []; }

$final_array = [
'data1' => $array1,
'data2' => $array2,
'data3' => $array3
];

$returnArray['data'] = $final_array;
$returnArray['success'] = 'true';
$returnArray['reason']  = '';return $returnArray;

}

При проверке с почтальоном, я получаю следующее:

введите описание изображения здесь

Теперь, так как мне не на что ссылаться, мой вопрос прост. Правильно ли я сделал это, и вот как должен форматироваться код возврата?

Спасибо!

0

Решение

Сейчас Hal плагин не используется для отображения вашего результата? Вы отвечаете на заказ json объект. Это действительно то, что вы хотите?

Ответ, который вы в настоящее время возвращаете, не отформатирован в соответствии с HAL технические характеристики. Правильный HAL ответ должен содержать как минимум _links ключ с self href, Было бы неправильно возвращать этот результат с Content-Type заголовки установлены в application/hal+json, Вы должны использовать application/json вместо.

Здесь вы можете найти документацию о том, как ответить HAL из RPC-contoller.

Я не уверен, чего вы хотите достичь, но, возможно, вы можете быть более конкретным в своем вопросе, чтобы другие могли помочь …

1

Другие решения

Не выглядит слишком плохо, возможно придерживаться стандарта, такого как jsend http://labs.omniti.com/labs/jsend или вы можете использовать hal-json, у Мэтью Вейера О’Финни есть хорошая запись в блоге на эту тему. https://mwop.net/blog/2014-03-26-apigility-rpc-with-hal.html

Также вам не нужно возвращать модель представления, так как вы можете просто вернуть массив и apigility вернет JSON. Вы также можете написать jsendViewModel, если вы пойдете по этому маршруту.

Не совсем ответ, но надеюсь, что это поможет вам!

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector