我目前正在使用laravel 5.6中的API,并且希望对v1和v2等API进行版本控制。
我的问题是我想运行一个URL并访问两个API版本,我将版本号传递到HEADER中,并根据版本号访问API控制器。我还使用中间件来检查版本号,但没有得到我所需要的。
这是我的 web.php
Route::post('/api/getticktes/{id}', 'Api\v1\TicketController@show')->middleware('checkHeaderV1');
标题 版本:-v1 版本:-v2
我的控制器目录是
Controller
-Api
--v1
---TicketController.php
--v2
---TicketController.php
答案 0 :(得分:0)
您可以使用此类,我在我的旧项目中使用过,也许这不是有效的方法,但是它将起作用
ApiVersion类
namespace App\Http;
use Illuminate\Http\Request;
class ApiVersion
{
protected static $valid_api_versions = [
1 => 'v1',
2 => 'v2'
];
protected static function get($request)
{
$allApiVersions = array_keys(self::$valid_api_versions);
$latestVersion = $allApiVersions[count($allApiVersions) - 1];
$apiVersion = $request->header('api-version', $latestVersion);
return in_array($apiVersion, $allApiVersions) ? $apiVersion : $latestVersion;
}
protected static function getNamespace($apiVersion)
{
return 'Api\\' . self::$valid_api_versions[$apiVersion];
}
public static function versionNamespace()
{
$request = Request::capture();
return $apiNamespace = ApiVersion::getNamespace(self::get($request));
}
}
现在在namespace
的api路由文件中使用此中间件
// API路由
$versionNameSpace = ApiVersion::versionNamespace();
Route::group(['middleware' => ['api'], 'namespace' => "{$versionNameSpace}"], function () {
});
在您的请求标头中添加api-version
。该值应为1或2等