0

我正在使用 ApiGilty 的 RPC 服务来返回一些数据。我想仔细检查这是否是格式化和返回数据的正确方法,因为我不能 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;

}

与邮递员核对时,我得到以下信息:

在此处输入图像描述

现在,由于我没有什么可以引用的,我的问题很简单。我是否以正确的方式解决了这个问题,这是返回代码的格式吗?

谢谢!

4

2 回答 2

1

现在该Hal插件不用于呈现您的结果?您正在响应自定义json对象。这真的是你想要的吗?

您当前返回的响应未按照HAL规范进行格式化。正确的HAL响应应该至少包含一个_links带有self href. 返回此结果并将Content-Type标头设置为是错误的application/hal+json。你应该application/json改用。

在这里您可以找到有关如何HALRPC-contoller.

我不确定你想要实现什么,但也许你可以在你的问题上更具体一点,以便其他人可以提供帮助......

于 2015-02-24T08:49:35.247 回答
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。

不完全是答案,但希望这对您有所帮助!

于 2015-02-23T13:47:35.960 回答