Laravel API 接口 传公共参数 (如 packageName、Version 等), 如何处理呢?

问题1、API 接口设计的时候, 下面参数如何做检查, 是在基类还是中间件中处理呢?或者有更好的方式
问题2、每个模型中都要保存以下字段,如果写一个默认的Model基类,自动获取下面的参数,不需要每次做Created或者Save时填写?
    // 包名 com.***.advert
    public $packageName;

    // 包版本 7.0.10
    public $packageVersion;

    // 包数字版本号 7010
    public $packageVersionNumber;

    // 包类型 Android | IOS
    public $packagePlatform;

    // 包渠道 应用市场 或者 其他推广渠道
    public $packageChannel;

    // API 版本 vnd.advert.v1(v1)
    public $apiVersion;

    // 项目ID
    public $projectId;

    // ABTest 需要
    public $bucketId;

    // 请求参数集合,除公共参数外所有请求参数
    public $bizContent;

    // IP
    public $ip;

十分感谢社区的朋友能给我指导,再次感谢!

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

1:中间件拦截 2:saving 方法设置。

仅供参考

4年前 评论
时俊 (楼主) 4年前

可以这样来做,做一个中间件,要写这些参数入库的时候经过这个中间件。

然后中间件里面可以获取这些参数,把验证通过了的参数,放到request的ParameterBag里面去。代码类似这样


    public function handle($request, Closure $next)
    {
        //验证后,放入request的ParameterBag中
        if ($request->ip() == '127.0.0.1') {
            $request->request->set('ip', 'local');
        }

        return $next($request);
    }

然后模型里面的保存只需要这样就可以取出来,如果确定一定有或者在验证阶段没有就赋默认值 ,就可以不用加判断


        $data = [];
        if ($request->request->has('ip')) {
            $data['ip'] = $request->request->get('ip');
        }

没有最好的方法,就看怎么做才适合你的系统。

4年前 评论
时俊 (楼主) 4年前
Summer
  1. 第一个问题,一般使用中间件来处理类似逻辑:『您的客户端版本过低,请更新应用』;
  2. 第二个问题,麻烦讲下使用场景。好奇模型的类叫什么名字?出于什么考虑而要保存这些请求数据呢?难道是用户会话?
4年前 评论
时俊 (楼主) 4年前
Summer (作者) 4年前
时俊 (楼主) 4年前

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