笔记:统一的接口响应类 HttpService

对API响应做统一的封装,让代码看起来更清晰一些。
HttpService 主要提供3个方法:success, error, validate
success和error方法统一响应相同格式的数据结构:
{“msg”: “测试错误”,”data”: [],”code”: 0}
validate方法只是基于系统Validator的封装。

代码:

<?php


namespace App\Service;


use Illuminate\Support\Facades\Validator;

class HttpService
{
    public function __construct()
    {

    }

   /**
     * success
     * @param $message
     * @param array $content
     * @param int $code
     * @param int $status
     * @return \Illuminate\Http\JsonResponse
     */
    public static function success(string $message, array $content = [], int $code = 1, int $status = 200)
    {
        $data['msg'] = $message;
        $data['data'] = $content;
        $data['code'] = $code;

        return response()->json($data, $status);
    }

    /**
     * error
     * @param $message
     * @param array $content
     * @param int $code
     * @param int $status
     * @return \Illuminate\Http\JsonResponse
     */
    public static function error(string $message, array $content = [], int $code = 0, int $status = 200)
    {
        $data['msg'] = $message;
        $data['data'] = $content;
        $data['code'] = $code;

        return response()->json($data, $status);
    }

    /**
     * 字段校验
     * @param $all
     * @param $rule
     * @param array $message
     * @param array $attribute
     * @return bool|string
     */
    public static function validate(array $all, array $rule, array $message = [], array $attribute = [])
    {
        $message = $message ?: self::getMessage();
        $attribute = $attribute ?: self::getAttributes();
        $validate = Validator::make($all, $rule, $message, $attribute);
        if ($validate->fails()) {
            return implode(' ', $validate->errors()->all());
        }

        return false;
    }

    /**
     * 字段校验规则转义(爱写不写)
     *      默认: resource/lang/en/validation.php
     * @return array
     */
    public static function getMessage()
    {
        return [
            'required' => '字段 :attribute 是必须的.',
            'unique' => '字段 :attribute 数据已经存在.',
            'between' => '字段 :attribute 必须在 :min - :max.之间',
        ];
    }

    /**
     * 字段校验字段转义(爱写不写)
     *      默认: resource/lang/en/validation.php (attributes)
     * @return array
     */
    public static function getAttributes()
    {
        return [];
    }


}

然后来简单对比一下:
官方手册demo写法:

    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);

        if ($validator->fails()) {
            return $validator->errors();
        }

        // response json
        return response()->json();
    }

基于HttpService类:

    public function storeNew(Request $request)
    {
        if ($error = HttpService::validate($request->all(), [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ])) {
            return Http::error($error);
        }

        return HttpService::success('ok');
    }

个人觉得好像更简单优雅了一些,实际也没啥区别。
小结:非喜勿扰,全凭喜好:laughing:

附:laravel 本地语言包:
composer require caouecs/laravel-lang
1.复制相应的语言包文件(/verdor/caouecs/laravel-lang)到 /resource/lang
2.修改配置文件/config/app.php。

    //修改为你使用的语言包
    'locale' => 'zh_CN',

其他:一个好玩的composer拼音译文包:
composer require overtrue/laravel-pinyin

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

为啥要对 content 是空的时候做特殊处理,因为数据为空导致返回的结构和预期不一致,我觉得这样不太好。。。。

2年前 评论

@fffswhk 好像是,我也想不起来当初为啥了,小细节看喜好吧

2年前 评论

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