Yii2 Restfull API и добавление новых методов

Многие разработчики  часто сталкиваются с необходимостью создания апи для распределенных систем, например как бакенд приложение и кабинет пользователя. Для их связи достаточно удобно использовать апи. Особенно если на его развертку уходит совсем мало времени.

У Yii2 есть великолепный инструмент для создания API на раз два три — «RESTful Web Service APIs».  Данный инструмент предоставляет возможность использовать методы CRUD.

Но зачастую бывает не достаточно этих методов. Например мне нужно было добавить еще один метод, который бы выполнял некую логику. Но в официальной документации описаны моменты создания стандартных сервисов апи. Проблема заключается в том что нужно добавить метод и дать возможность передавать ему параметры из GET. Без параметров все ок, но с параметрами никак не хотел заводится.

Гугливание тоже не помогло и тогда пришлось копать сам код фреймворка, чтобы понять что к чему.

В классе rest/UrlRule есть свойство $tokens.  Который описывает параметры которые передаются через GET.

В общем вот готовый пример для создания нового метода и передачи необходимого количество параметров.

        'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => true,
            'showScriptName' => false,
            'rules' => [
                [
                    'class' => 'yii\rest\UrlRule',
                    'controller' => 'api',
                    'pluralize' => false,
                    'tokens' => [
                        '{id}' => '<id: \\w+>',
                        '{hash}' => '<hash: \\w+>'
                    ],
                    'extraPatterns' => [
                        'GET test/{hash}' => 'test',
                    ],
                    //'except' => ['create', 'update'],
                ],
            ],
        ]

 

id — стандартный параметр который используется для стандартных CRUD методов.

hash- Наш новый добавленный параметр.

А вот так выглядит метод в самом контроллере

public function actionTest($hash){
return Clients::find()-&amp;amp;amp;amp;amp;amp;gt;where(['hash'=&amp;amp;amp;amp;amp;amp;gt;$hash])-&amp;amp;amp;amp;amp;amp;gt;one();
}

Надеюсь данная информация была полезна.

Добавить комментарий