API Resources 层只负责确保返回数据格式,按照《Laravel项目开发规范》每个resources文件都只对应一个列表查询吗,同一Controller有多个列表查询呢
<?php
namespace App\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class AssetRateResource extends JsonResource
{
public function toArray($request): array
{
return [
// 把所需字段一个个列出来
'asset_uuid' => $this->resource->asset_uuid,
'rate' => $this->resource->rate,
];
}
}
如果返回格式一样可以共用,不一样就加多一个
如果只是单纯的隐藏和展示部分字段,可以使用api系列化实现 ,makeHidden,makeVisible。如果是不同的结构,差异化较大,可以采用多个resources文件
我个人觉得这东西有一点儿阴间,这个的设计理念应该是直接与模型相对应的,理论上,一个资源文件对应一个模型,即使有子元素,那这些子元素也应该与当前模型有关联(关联关系)。
但是实际业务中吧,又存在很多时候偏离模型的,目前在尝试使用
spatie/laravel-data
resources 在我接触的业务里没用过,我直接 封装 JsonResponse 做统一返回,使用这种方法是参考 abort() 函数来的,这个回复一并把这个问题提下’’框架如何统一api返回的json格式及状态码算是最佳实现 ‘’ 希望可以帮到你
接口状态码的问题,一般情况下接口返回的 http 状态都是200,之前尝试使用过内置的比如(400,401,403)等,但是前端的体验会相当 不好,所以放弃,实际的状态码 会配合 统一返回的 code 一并返回。
封装统一返回内容参考
使用
在resource文件中改造toArray方法 通过接受请求参数来决定具体返回的数据格式