大家有没有觉得 API 资源和 API 资源集合是鸡肋一样的存在

首先,我陈述一下,使用过程的中几个不行“不能”。
一、使用API资源类,可以定制接口返回到数据。但是不能自定义接口返回的元数据。
也就是,你无法再返回数据的data的同级,新增类似于"code"和"msg"的返回值。
以下是官方文档摘录

当然了,使用如上方法你将不能添加任何附加的元数据和集合一起返回。如果你需要自定义资源集合响应,你需要创建一个专用的资源来表示集合:
php artisan make:resource UserCollection

二、使用API资源集合类,可以定制元数据的返回。但是不能自定义列表数据的每一个项的数据返回。
也就是说,你的模型列表返回什么样的数据,API资源集合类,就是原封不动的返回前端,只是帮你转成json格式而已。
三、虽然可以通过API资源集合类内部再次调用API资源类的方法,可以达到,自定义返回列表数据的要求。但是不能各自的定制化。
也就是说,使用这种方式,你的API资源和API资源集合类将永远的绑定到了一起。代码如下所示。

class CourseCateCollection extends ResourceCollection
{

    public function toArray($request)
    {
        return [
            'code' => '200',
            'msg' => 'success',
            'data' => CourseCateResource::collection($this->collection),
        ];
    }
}

有一种情况,又是需要去这种耦合的,比如,我分类列表页面返回的字段应该就是有限的几个,而分类详情相对会多一些。这个时候,又不能解决实际问题了。
四、通过自己封装返回值函数,包裹最外层返回的元数据,然后里面用API资源和API资源集合类。
这个时候,就有点舍本逐末的,我们使用API资源就是方便我们处理数据格式的,现在要我们自己封装函数,来处理数据格式的问题。那我们用API资源干啥。
你们怎么看?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 6
ibucoin

具体看你怎么用,如果你做的项目是这样的,将大部分可展示的字段都返回给前端,比如评论这个模型,由前端来选择用那几个字段,这样统一化的处理是挺不错的。
但是,如果你每个接口都是定制化的数据,比如有的只返回标题,有的多返回几个字段,resource和模型关联就非常的难用,模型关联比如关联user查出来的数据会被包裹,不如left join简便。

5年前 评论

@ibucoin 我前期开发,也可以把数据都返回给前端,让前端来选择。我主要是考虑到,在项目开发的后期,如果后端不想暴露一些数据给前端的话,怎样才能这个api资源集合上修改。达到集中修改的目的。

5年前 评论

所以这个功能我没用过 :joy:

4年前 评论

主要是自定义返回信息 其他倒是没什么特殊的


public function toArray(App\Models\User $data)
{
   return [
    'id' => $data->id,
    'nickanme' => $data->userInfo->nickname
    'avatar' => Storage::url($data->userInfo->avatar)
   ];
}
4年前 评论

格式化时间为 UTC 了.不是原来的时间格式了.

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!