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,
        ];
    }
}
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10

如果返回格式一样可以共用,不一样就加多一个

1年前 评论
wangyou (楼主) 1年前
通尼和它的朋友 (作者) 1年前

如果只是单纯的隐藏和展示部分字段,可以使用api系列化实现 ,makeHidden,makeVisible。如果是不同的结构,差异化较大,可以采用多个resources文件

1年前 评论

我个人觉得这东西有一点儿阴间,这个的设计理念应该是直接与模型相对应的,理论上,一个资源文件对应一个模型,即使有子元素,那这些子元素也应该与当前模型有关联(关联关系)。

但是实际业务中吧,又存在很多时候偏离模型的,目前在尝试使用 spatie/laravel-data

1年前 评论
wangyou (楼主) 1年前
Rache1 (作者) 1年前
wangyou (楼主) 1年前

resources 在我接触的业务里没用过,我直接 封装 JsonResponse 做统一返回,使用这种方法是参考 abort() 函数来的,这个回复一并把这个问题提下’’框架如何统一api返回的json格式及状态码算是最佳实现 ‘’ 希望可以帮到你

接口状态码的问题,一般情况下接口返回的 http 状态都是200,之前尝试使用过内置的比如(400,401,403)等,但是前端的体验会相当 不好,所以放弃,实际的状态码 会配合 统一返回的 code 一并返回。

状态码实际的处理都会交给 Handler,意料之外的错误交给自定义的 Exception 类处理
业务层面(表单校验等)如果需要,具体返回怎样的状态码 可以改造 failedValidation 达到效果

封装统一返回内容参考


if( !function_exists('json')){

    /**
     * 统一json 返回类型
     *
     * @param null $data
     * @param int $status
     * @param array $headers
     * @param int $options
     *
     * @return JsonResponse|\Illuminate\Http\Response
     */
    function json($data = null, $status = 200, $headers = [], $options = 0)
    {
        return new JsonResponse($data, $status, $headers, $options);
    }
}

if( !function_exists('success')){

    /**
     * 统一返回格式: 成功
     *
     * @param array $data
     * @return JsonResponse
     */
    function success(array $data = [])
    {
        return json(array_merge(['msg' => 'success', 'code' => 0, 'data' => ''], $data));
    }
}

if( !function_exists('fail')){

    /**
     * 统一返回格式: 失败
     *
     * @param array $data
     * @param int $status
     * @return JsonResponse
     */
    function fail(array $data = [], $status = 200)
    {
        return json(array_merge(['msg' => 'fail', 'code' => 1, 'data' => ''], $data), $status);
    }
}

使用

    /**
     * 我的菜单
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response
     */
    public function menus()
    {
        return success([
            'data' => UserLogic::getMenus(true)
        ]);
    }
1年前 评论

在resource文件中改造toArray方法 通过接受请求参数来决定具体返回的数据格式

1年前 评论

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