我正在使用ApiGilty的RPC服务来返回一些数据。我想仔细检查这是否是格式化和返回数据的正确方法,因为我不能100%确定正确的过程。
编辑:澄清 数据是从许多实体构建的:
main
main_extra
main_data
main_data_days
main_data_tiers
有没有办法命中main并获取所有子实体?目前我正在从头开始构建我的数据并返回一个数组。
我的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 :(得分:1)
目前,Hal
插件未用于渲染您的结果?您正在响应自定义json
对象。这真的是你想要的吗?
您当前返回的回复未按照HAL
规范进行格式化。正确的HAL
响应应至少包含_links
self
href
的{{1}}密钥。将Content-Type
标头设置为application/hal+json
时返回此结果是错误的。您应该使用application/json
代替。
Here you can find documentation on how to respond HAL
from an RPC-contoller
我不确定你想要达到的目的但也许你可以在你的问题中更具体一些,以便其他人可以帮助...
答案 1 :(得分:0)
看起来不太糟糕,或许坚持使用jsend http://labs.omniti.com/labs/jsend之类的标准,或者你可以使用hal-json,matthew weier o'phinney在此https://mwop.net/blog/2014-03-26-apigility-rpc-with-hal.html上有一篇很好的博客文章
此外,您不需要返回视图模型,因为您只能返回一个数组,而apigility将返回JSON。如果沿着那条路走下去,你也可以写一个jsendViewModel。
不完全是答案,但希望这可以帮到你!