详解Laravel5.6通过路由进行API版本控制的简单方法

Laravel版本:5.6

API随着迭代,新版本往往需要继承老版本的功能,并对原有的功能修改和扩展,这时为了兼容各个版本的接口,就需要进行版本控制。

请求版本区分:

在请求的header中附带版本信息,如app-version:1.0.1

laravel这边的获取方法:

Request::header('app-version');

文件路径:

1.0.1版本的UserController,文件路径就是
app/Http/Controllers/Api/v1d0d1/UserController.php

1.0.2版本,就是
app/Http/Controllers/Api/v1d0d2/UserController.php

注意1.0.2版本如果需要使用1.0.1原有的功能,需要继承原有的类

use App\Http\Controllers\Api\UserController as UserCtrl;
class UserController extends UserCtrl
{
  ...
}

版本控制

版本解析方法:

function getRouteContoller($controllerName)
{
  $base_path = 'App\Http\Controllers\Api\\';
  //无版本
  $app_version = Request::header('app-version');
  if (!$app_version) return $controllerName;
  //当前版本
  $version_path = 'v' . str_replace('.', 'd', $app_version) . '\\';
  $controllerPath = $base_path . $version_path . $controllerName;
  if (class_exists($controllerPath)) {
    return $version_path . $controllerName;
  }
  //往期版本
  $versionNumbers = intval(str_replace('.', '', $app_version));
  for ($i = $versionNumbers - 1; $i > 0; $i--) {
    $version_path = 'v' . implode('d', str_split($i)) . '\\';
    $controllerPath = $base_path . $version_path . $controllerName;
    if (class_exists($controllerPath)) {
      return $version_path . $controllerName;
    }
  }
  return $controllerName;
}

注:该方法会将1.0.2版本解析为v1d0d2,并判断对应类是否存在,如果存在则直接返回类的路径;不存在则向下寻找1.0.1版本类是否存在,直到找到存在的类返回。

路由文件

Route::post('login', getRouteContoller('UserController').'login');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • laravel 配置路由 api和web定义的路由的区别详解

    1.路由经过中间件方面不同 打开kerenl.php就可以看到区别 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illumina

  • 详解Laravel5.6通过路由进行API版本控制的简单方法

    Laravel版本:5.6 API随着迭代,新版本往往需要继承老版本的功能,并对原有的功能修改和扩展,这时为了兼容各个版本的接口,就需要进行版本控制. 请求版本区分: 在请求的header中附带版本信息,如app-version:1.0.1 laravel这边的获取方法: Request::header('app-version'); 文件路径: 1.0.1版本的UserController,文件路径就是 app/Http/Controllers/Api/v1d0d1/UserControlle

  • 详解Struts2中Action访问Servlet API的几种方法

    详解Struts2中Action访问Servlet API的几种方法 在通常的web开发中Request和Response对象比较常见,但在Struts2框架中由于Action能与JSP页面进行数据交互,所以通常都不会用到这两个对象.如果想在Struts2程序中用到这两个对象,也有解决方法 Struts2的Action并未直接与任何Servlet API耦合,这是Struts2的一个改良之处,因为Action类不再与Servlet API耦合,能更轻松的测试该Action.但如何访问? Web应

  • 详解PyQt5中textBrowser显示print语句输出的简单方法

    开发python程序处理大数据量的时候,少不了使用print语句看看输出结果:长时间处理数据时用print输出处理进展情况.使用PyQt5开发了UI界面后,本能地想让已自己调试好的py代码中的print输出到UI的textBrowser中显示出来.在CSDN上查了不少结果,一般都是使用多线程.我对多线程研究不多,就采用了变通办法,效果还挺好. 在Ui界面程序(Ui_startaml.py)中设置textBrowser用于显示程序输出信息,并自己定义代码(def printf ),以后将.py程序

  • 详解IDEA中MAVEN项目打JAR包的简单方法

    Idea中为一般的非Web项目打Jar包是有自己的方法的,网上一搜就能查到很多. 但是如果是为Maven项目打Jar包,其实是很简单的,因为maven本身就有打Jar包的命令. 最简单的方法 首先是在maven项目的pom.xml中添加打包的插件,这里有很多种方式的.最最简单的就是只使用maven-compiler-plugin.maven-jar-plugin插件,并且指定程序入口<mainClass>.相关代码如下: pom.xml文件为: <?xml version="1

  • 详解python 破解网站反爬虫的两种简单方法

    最近在学爬虫时发现许多网站都有自己的反爬虫机制,这让我们没法直接对想要的数据进行爬取,于是了解这种反爬虫机制就会帮助我们找到解决方法. 常见的反爬虫机制有判别身份和IP限制两种,下面我们将一一来进行介绍. (一) 判别身份 首先我们看一个例子,看看到底什么时反爬虫. 我们还是以 豆瓣电影榜top250(https://movie.douban.com/top250) 为例.` import requests # 豆瓣电影榜top250的网址 url = 'https://movie.douban

  • 详解各版本React路由的跳转的方法

    前言 React-Router已经发布了多个版本,利用路由导航的使用方法都不大一样,在这里总结一下. React-Router 2.0.0 版本 2.0.0版本需要使用browserHistory进行跳转,具体参考一下代码: import { browserHistory } from 'react-router' browserHistory.push('/path') React-Router 2.4.0版本以上 React-Router 2.4.0版本以上,可以通过mixin的方法,使组件

  • 详解Android项目多服务端接口适配(超简单)

    现状 Android项目如果是多服务端接口时,一般怎么弄呢? 方法1:服务器地址放在Header中 把服务器地址放在接口Header中,然后通过拦截器来动态修改请求地址而实现的.除了默认服务器的接口,其它都要加一个Header,有点麻烦.看起来也不爽,不简洁. interface ApiHeaderCase { /************************** server A ****************************/ @Headers("host:$SERVER_HOS

  • 详解vue中v-for和v-if一起使用的替代方法template

    目录 版本 目标效果 说明 解决方法 核心代码片段 Car.vue vue中v-for和v-if一起使用的替代方法template 版本 vue 2.9.6element-ui: 2.15.6 目标效果 说明 在 vue 2.x 中,在一个元素上同时使用 v-if 和 v-for 时,v-for 会优先作用 解决方法 选择性地渲染列表,例如根据某个特定属性(category )来决定不同展示渲染,使用计算属性computed 见https://www.jb51.net/article/24717

  • 详解node服务器中打开html文件的两种方法

    本文介绍了详解node服务器中打开html文件的两种方法,分享给大家,具体如下: 方法1:利用 Express 托管静态文件,详情查看这里 方法2:使用fs模块提供的readFile方法打开文件,让其以text/html的形式输出. 代码: var express = require('express'); var fs=require("fs"); var app = express(); //方法1:通过express.static访问静态文件,这里访问的是ajax.html //

  • Java 详解单向加密--MD5、SHA和HMAC及简单实现实例

    Java 详解单向加密--MD5.SHA和HMAC及简单实现实例 概要: MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法. MD5 MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.MD5是输入不定长度信息,输出固定长度128-bits的算法. MD5算法具有以下特点: 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的. 2.容易计算:从原数据计算出MD5值很容易. 3.抗修改性:对原数据进行任何

随机推荐