почему yiii2 остальные версии API не работает? - PullRequest
0 голосов
/ 30 августа 2018

Моя папка и структура кода -

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) {

}


}

1 Ответ

0 голосов
/ 30 августа 2018

Из документов вы связались:

Оба метода имеют свои плюсы и минусы, и о каждом подходе идет много споров. Ниже вы увидите практическую стратегию управления версиями API, которая представляет собой сочетание этих двух методов:

  • Поместите каждую основную версию реализации API в отдельный модуль, идентификатор которого является основным номером версии (например, v1, v2). Естественно, URL-адреса API будут содержать основные номера версий.

  • В каждой основной версии (и, следовательно, в соответствующем модуле) используйте заголовок запроса HTTP Accept, чтобы определить младший номер версии, и напишите условный код для соответствующего ответа на второстепенные версии.

Основной номер версии API определяется URL, как вы установили в своем urlManager. Вы можете получить к ним доступ, позвонив по номеру your-yii2-app.com/v1/controller/action или your-yii2-app.com/v2/controller/action. Любой код, который анализирует заголовок, должен быть написан вами:

Примите заголовок HTTP-запроса, чтобы определить младший номер версии, и напишите условный код для соответствующего ответа на второстепенные версии.

Если вы хотите написать собственную функцию заголовка версии API, это возможно. Я предлагаю вам попытаться создать новый вопрос, если у вас возникнут проблемы.

...