Yii2 Rest Api

Инфо http://developer.uz/blog/restful-api-in-yii2/

Исходники
https://github.com/des1roer/yii2test



На самом деле сложности никакой нет

Что нужно запомнить - в rules апи прописывается сверху


В config/web.php

========
<?
        'urlManager' => [
            // Disable index.php
            'showScriptName' => false,
            'enableStrictParsing' => true,
            // Disable r= routes
            'enablePrettyUrl' => true,
            'rules' => array(
                ['class' => 'yii\rest\UrlRule', 'controller' => ['api/v1/unit'], 'pluralize' => false],
                ['class' => 'yii\rest\UrlRule', 'controller' => ['api_v1/unit'], 'pluralize' => false],
                '<controller:\w+>/<id:\d+>' => '<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
            ),
        ],
========

Блок с UrlRule должен быть выше блока ЧПУ

Про версионность
========
<?
    'modules' => [
        'api' => [
            'class' => 'app\modules\api\Module',
            'modules' => [
                'v1' => [
                    'class' => 'app\modules\api\modules\v1\Module',
                ],
            ],
        ],
        'api_v1' => [
            'class' => 'app\modules\api\modules\v1\Module',
        ],
    ],
========
Т.е. в первом варианте будет путь http://yii2test/api/v1/unit 
во втором http://yii2test/api_v1/unit 

Про версионированние

https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/rest-versioning.md

Сам модуль выглядит как на скрине выше.

В контроллере все достаточно просто

-------------
<?php

namespace app\modules\api\modules\v1\controllers;

use app\models\Unit;
use yii\rest\ActiveController;

class UnitController extends ActiveController
{
    public $allowedActions = ['index', 'view', 'update', 'create', 'delete'];

    public $modelClass = Unit::class;
}

-------------

Про модель - 

------------
 <?   
    public function extraFields()
    {
        return [
            'items' => function () {
                return $this->id;
            },
            'parentApi'
        ];
    }

    public function getParentApi()
    {
        return self::find()->where(['id' => $this->parent_id])->one();
    }
------------

Блок extraFields - 
это некоторые поля, получить данные можно добавив в пути параметр expand='{parametr}'
записать как видно можно разными путями









Популярные сообщения из этого блога

Пишем логи на C# (.NET). Легкий способ.

Средства для работы с базой данный PostgreSql

Авторизация yii 2 из базы