php - 使用不同的控制器和 API 方法访问相同的 url
问题描述
我目前正在使用 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
解决方案
你可以使用这个类,我在我的旧项目中使用过它,可能不是有效的方法,但它会起作用
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));
}
}
现在在 api 路由文件中使用这个中间件namespace
//API 路由
$versionNameSpace = ApiVersion::versionNamespace();
Route::group(['middleware' => ['api'], 'namespace' => "{$versionNameSpace}"], function () {
});
添加api-version
您的请求标头。该值应为 1 或 2 等
推荐阅读
- python - How to use Tkinter OptionMenu to select microphone input
- python - 来自透明的 Matplotlib Colourmap
- python-3.x - AttributeError:“NoneType”对象没有属性“media_player_new”
- reactjs - React - change another component
- xml - Xslt node exists for multiple elements
- node.js - koa/supertest - server.close is not a function
- pandas - Pandas: Applying '&' operator in df.query(), in mutiindex scenario
- sql-server - Connect app in Azure VM to SQL Server in shared environment
- azure-devops - 当有人编辑管道定义时,我如何获得通知?
- windows-mixed-reality - 如果文本转语音过多,我的 HoloLens 2 会关闭