lassehaslev/api-response

用于生成JSON API响应的辅助类

0.1.3 2016-07-11 10:34 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:20:09 UTC


README

用于生成JSON API响应的辅助类

动机

为所有事物编写API响应总是很困难,这个包会使这项工作变得容易得多。

这个包及其基本概念受到了 dingo/api 的极大启发。并且使用了与 Fractal 相同的大部分转换器语法。

安装

我主要在我的 Laravel 项目中使用这个包。

在项目文件夹中运行 composer require lassehaslev/api-response

使用方法

响应者

响应者是我们调用要将哪些项转换为JsonResponse的地方。这个类需要实现 ResponseTrait,然后会使 $this->response 对象可用。这将使我们可以使用 $response->item()$response->collection()。这两个函数的第一个参数是要转换的数据,第二个参数是转换数据的转换器。以下将提供更多信息。

use LasseHaslev\ApiResponse\Responses\ResponseTrait;
class ResponseCaller
{
    use ResponseTrait;

    public function getItem() {
        return $this->response->item( [ 'name'=>'Test name' ], new Transformer );
    }

    public function getCollection() {
        return $this->response->collection( [
            [ 'name'=>'Test name' ],
            [ 'name'=>'Another test name' ]
        ], new Transformer );
    }

}

转换器

转换器是我们将数据格式化为API的地方。你所要做的就是创建一个带有你想要转换的模型的 public function transform。然后你返回一个包含数据的 array

你还可以让转换器包含更多的数据。当模型有数据时,这可能很有用。这是通过两种不同的类型 defaultavailable 来实现的,但两种类型的工作方式相同:更新类型的数组示例:protected $defaultIncludes = ['name']。然后你需要创建一个具有 include 前缀的公共函数。例如:public function includeName( $model )

默认包含

默认包含将默认包含。

可用包含

可用包含只有在提供了URL参数 include 时才会包含。例如 /api/request?include=name

如果你有多个可用包含,你可以通过具有以下URL请求来包含它们:/api/request?include=first,second

use LasseHaslev\ApiResponse\Transformers\Transformer as BaseTransformer;
class Transformer extends BaseTransformer
{

    protected $defaultIncludes = [ 'default' ];
    protected $availableIncludes = [ 'available' ];

    /**
     * Transform $model
     *
     * @return Array
     */
    public function transform( $model )
    {
        return [
            'name'=>$model[ 'name' ],
        ];
    }

    /**
     * Return include default
     *
     * @return Array
     */
    public function includeDefault($model)
    {
        return [ 'name'=>'Include default' ];
    }

    /**
     * Return include available
     *
     * @return Array
     */
    public function includeAvailable($model)
    {
        return [ 'name'=>'Include available' ];
    }

}

许可证

MIT,狗