簡體   English   中英

為什么yiii2 rest api版本不起作用?

[英]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/actionyour-yii2-app.com/v2/controller/action來訪問它們。 解析標頭的任何代碼都必須由您編寫:

接受HTTP請求標頭以確定次要版本號,並編寫條件代碼以相應地響應次要版本。

如果要編寫自定義api版本標頭功能,則可以這樣做。 如果您遇到麻煩,建議您嘗試創建一個新問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM