Laravel + Dingo中的一致REST API响应

Aje*_*esh 9 php rest json laravel dingo-api

我一直在开发一套针对移动应用程序公开的其他API.我正在遵循Laravel项目开发的存储库模式.如何实现演示器和转换器,以便在我的所有API集合中格式化常量JSON输出?

例如,我有以下控制器用于登录

public function authenticate()
    {
        $request = Request::all();  
        try {
                // If authenticated, issue JWT token
                //Showing a dummy response
                return $token;
            }  catch (ValidatorException $e) {
                return Response::json([
                    'error'   =>true,
                    'message' =>$e->getMessageBag()
                ]);
            }
    }
Run Code Online (Sandbox Code Playgroud)

现在变压器和演示者在哪里?我知道两者都用于通过转换db对象来格式化输出,并生成格式化的JSON,以便它在我的API中保持一致.

dingo API和fractal甚至框架(L5存储库)都没有提供详细的文档,我找不到任何相关的教程.

我为另一个 API 创建了以下演示者和变换器,它提供了产品列表

namespace App\Api\V1\Transformers;

use App\Entities\Product;
use League\Fractal\TransformerAbstract;

class UserTransformer extends TransformerAbstract {

    public function transform(\Product $product)
    {
        return [
            'id'     => (int) $product->products_id
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

主持人

<?php

namespace App\Api\V1\Presenters;

use App\Api\V1\Transformers\ProductTransformer;
use Prettus\Repository\Presenter\FractalPresenter;

/**
 * Class ProductPresenter
 *
 * @package namespace App\Presenters;
 */
class ProductPresenter extends FractalPresenter
{
    /**
     * Transformer
     *
     * @return \League\Fractal\TransformerAbstract
     */
    public function getTransformer()
    {
        return new UserTransformer();
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在控制器中设置演示者并回复?试着

$this->repository->setPresenter("App\\Presenter\\PostPresenter");
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用,文档没有显示完整的步骤.

  1. 在上面的示例中,如何为我可以在整个API中使用的错误响应创建模板,以及如何将错误异常传递给它?
  2. 看起来像presenter和transformer可以用来将数据库对象转换为可呈现的JSON,而不是其他任何东西.是对的吗?
  3. 如何使用演示者和变换器获得成功响应和错误响应?通过将异常而不是DB对象传递给变换器?

tix*_*ix3 -1

分形在这里有完整的记录:http://fractal.thephpleague.com/ 我经常从 Phil Sturgeon 那里读一本很棒的书https://leanpub.com/build-apis-you-wont-hate你可以找到大多数github 上提供的书籍代码https://github.com/philsturgeon/build-apis-you-wont-hate。您可以在那里找到非常好的分形示例。

  1. 我将创建一个 Api 控制器并从我的控制器扩展它。那里应该有所有响应函数(respondWithError、respondWithArray 等)
  2. Transformers 以一致的 json 格式转换对象,以便所有端点为每个实体返回相同的内容。

  3. 对此确实没有答案

  4. 分形文档中有足够的示例。