大家有没有觉得 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资源干啥。
你们怎么看?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 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年前 评论

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