1. Install Yii2
Download, install and verify the installation of Yii2 (I'm using the advanced application template) .
Instructions: https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-installation.md
Instructions: https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-installation.md
2. Folder structure
- \
- api
- config
- modules
- v1
- controllers
- models
- runtime
- cache
- debug
- logs
- web
- backend
- common
- ...
3. Files
3.1 Add files
I copied the files from the backend directory and edited them afterwards. (Some files have been created manually)
- \
- api
- config
- main.php
- main-local.php
- params.php
- params-local.php
- modules
- v1
- controllers
- ArtistController.php
- models
- Artist.php
- Module.php
- runtime
- cache
- debug
- logs
- web
- .htaaccess
- index.php
- backend
- common
- ...
3.2 Edit files
\common\config\main-local.php
Configure the database correctly
\api\config\main.php
- Change the id from 'app-backend' to 'app-api'
- Remove the controllerNamespace
- Change the modules to:
'modules' => [ 'v1' => [ 'basePath' => '@app/modules/v1', 'class' => 'api\modules\v1\Module' ] ],
- Add the the components:
'request' => [ 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ] ], 'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ [ 'class' => 'yii\rest\UrlRule', 'controller' => 'v1/artist', 'tokens' => [ '{id}' => '<id:\\w+>' ], 'extraPatterns' => [ // 'GET alive' => 'alive', ], ] ], ]
\api\config\main-local.php
- Change $config to $config = [];
\api\modules\v1\controllers\ArtistController.php
Change the file to:
<?php namespace api\modules\v1\controllers; use yii\rest\ActiveController; /** * Artist Controller API * * @author Unknown */ class ArtistController extends ActiveController { public $modelClass = 'api\modules\v1\models\Artist'; // Default actions // GET /artists: list all artists // HEAD /artists: show the overview information of artist listing // POST /artists: create a new artist // GET /artists/AU: return the details of the artist AU // HEAD /artists/AU: show the overview information of artist AU // PATCH /artists/AU: update the artist AU // PUT /artists/AU: update the artist AU // DELETE /artists/AU: delete the artist AU // OPTIONS /artists: show the supported verbs regarding endpoint /artists // OPTIONS /artists/AU: show the supported verbs regarding endpoint /artists/AU. public function actions() { $actions = parent::actions(); // Possibility to unset default actions // unset($actions['index']); return $actions; } // Define custom actions // public function actionAlive() // { // return new ActiveDataProvider([ // 'query' => Proxy::find()->where(['Alive' => 1]), // 'pagination' => false, // ]); // } }
\api\modules\v1\models\Artist.php
Use GII to generate your model.
More information: http://www.yiiframework.com/doc-2.0/guide-start-gii.html
Make sure that the use and the namespace is correct:
namespace api\modules\v1\models; use \yii\db\ActiveRecord;
\api\modules\v1\Module.php
Change the file to:
<?php namespace api\modules\v1; class Module extends \yii\base\Module { public $controllerNamespace = 'api\modules\v1\controllers'; public function init() { parent::init(); } }
\api\web\.htaccess
Change the file to:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
\api\web\index.php
<?php defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); require(__DIR__ . '/../../vendor/autoload.php'); require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php'); require(__DIR__ . '/../../common/config/bootstrap.php'); $config = yii\helpers\ArrayHelper::merge( require(__DIR__ . '/../../common/config/main.php'), require(__DIR__ . '/../../common/config/main-local.php'), require(__DIR__ . '/../config/main.php'), require(__DIR__ . '/../config/main-local.php') ); $application = new yii\web\Application($config); $application->run();\common\bootstrap.php
Add to the file:
Yii::setAlias('api', dirname(dirname(__DIR__)) . '/api');
4. Test
Navigate to: http://localhost:8080/Music%20api/advanced/api/web/v1/artists
Expected result:
<response> <item> <Id>31</Id> <Name>Mampi Swift</Name> </item> <item> <Id>32</Id> <Name>Psion</Name> </item> <item> <Id>33</Id> <Name>Perfect Combination</Name> </item> </response>
No comments:
Post a Comment