Я использую 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;
}
При проверке с почтальоном, я получаю следующее:
Теперь, так как мне не на что ссылаться, мой вопрос прост. Правильно ли я сделал это, и вот как должен форматироваться код возврата?
Спасибо!
Сейчас Hal
плагин не используется для отображения вашего результата? Вы отвечаете на заказ json
объект. Это действительно то, что вы хотите?
Ответ, который вы в настоящее время возвращаете, не отформатирован в соответствии с HAL
технические характеристики. Правильный HAL
ответ должен содержать как минимум _links
ключ с self
href
, Было бы неправильно возвращать этот результат с Content-Type
заголовки установлены в application/hal+json
, Вы должны использовать application/json
вместо.
Здесь вы можете найти документацию о том, как ответить HAL
из RPC-contoller
.
Я не уверен, чего вы хотите достичь, но, возможно, вы можете быть более конкретным в своем вопросе, чтобы другие могли помочь …
Не выглядит слишком плохо, возможно придерживаться стандарта, такого как jsend http://labs.omniti.com/labs/jsend или вы можете использовать hal-json, у Мэтью Вейера О’Финни есть хорошая запись в блоге на эту тему. https://mwop.net/blog/2014-03-26-apigility-rpc-with-hal.html
Также вам не нужно возвращать модель представления, так как вы можете просто вернуть массив и apigility вернет JSON. Вы также можете написать jsendViewModel, если вы пойдете по этому маршруту.
Не совсем ответ, но надеюсь, что это поможет вам!