[英]why yiii2 rest api versioning is not working?
我的文件夾和代碼結構是-
api/
modules/
v1/
controllers/
UserController.php
BaseController.php
Module.php
v2/
controllers/
UserController.php
BaseController.php
Module.php
我的應用程序配置如下所示:
'modules' => [
'v1' => [
'basePath' => '@app/modules/v1',
'class' => 'api\modules\v1\Module'
],
'v2' => [
'basePath' => '@app/modules/v2',
'class' => 'api\modules\v2\Module'
],
],
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => false,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => ['v2/user']],
['class' => 'yii\rest\UrlRule', 'controller' => ['v1/user']],
],
]
我遵循與yii2 doc相同的過程,但是其版本控制無效。
更新:我創建了一個服裝規則並據此進行解析。 尋找其他東西。
class ApiUrlRule implements UrlRuleInterface {
public function parseRequest($manager, $request) {
$pathInfo = $request->getPathInfo();
$paramas=$request->getQueryParams();
$version=Yii::$app->response->acceptParams['version'];
$route = Yii::$app->response->acceptParams['version'].'/'.$pathInfo;
return [$route,$paramas];
}
public function createUrl($manager, $route, $params) {
}
}
從您鏈接的文檔中 :
兩種方法各有利弊,關於每種方法都有很多爭論。 下面您將看到一種實用的API版本控制策略,該策略是這兩種方法的組合:
將API實現的每個主要版本放在一個單獨的模塊中,該模塊的ID是主要版本號(例如v1,v2)。 當然,API URL將包含主要版本號。
在每個主要版本中(並因此在相應的模塊中),使用Accept HTTP request標頭確定次要版本號,並編寫條件代碼以相應地響應次要版本。
api的主要版本號由您在urlManager中設置的網址確定。 您可以通過調用your-yii2-app.com/v1/controller/action
或your-yii2-app.com/v2/controller/action
來訪問它們。 解析標頭的任何代碼都必須由您編寫:
接受HTTP請求標頭以確定次要版本號,並編寫條件代碼以相應地響應次要版本。
如果要編寫自定義api版本標頭功能,則可以這樣做。 如果您遇到麻煩,建議您嘗試創建一個新問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.