PHPackages                             sorokinmedia/yii2-api-helpers - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. sorokinmedia/yii2-api-helpers

ActiveYii2-extension[API Development](/categories/api)

sorokinmedia/yii2-api-helpers
=============================

Api helpers for Yii2

1256PHP

Since Apr 14Pushed 6y ago5 watchersCompare

[ Source](https://github.com/sorokinmedia/yii2-api-helpers)[ Packagist](https://packagist.org/packages/sorokinmedia/yii2-api-helpers)[ RSS](/packages/sorokinmedia-yii2-api-helpers/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependenciesVersions (2)Used By (0)

Yii2 API helpers
================

[](#yii2-api-helpers)

[![Total Downloads](https://camo.githubusercontent.com/40ad1a997dc4c468840ad268f987a72fbca03e9fb08280192595a05102d8d63e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f736f726f6b696e6d656469612f796969322d6170692d68656c706572732e737667)](https://packagist.org/packages/sorokinmedia/yii2-api-helpers)

Компонент для стандартизации настройки и работы с API в Sorokin.Media

Компонент содержит в себе набор заготовленных классов для упрощения и стандартизации написания сервисов для API.

- `ActionModel` - классы для описания действий в моделях (кнопки, ссылки и т.п.)
- `ApiAnswer` - классы для стандартизации ответов сервера. Описаны часто встречающиеся ошибки, для упрощения написания кода
- `Controller` - описание работы контроллеров, метод аутентификации, исключаемые экшены и т.д. Следует наследовать все API контроллеры на проекте от `ApiController`
- `CrudModels` - описание классов, которые позволяют быстро и в едином стандарте описать сервисы для CRUD (в первую очередь листы моделей).
- `Interfaces` - интерфейсы, которые могут быть имплементированы на проекте при работе с API.
- `Traits` - трейты, который могут быть использованы на проекте при работа с API.

Установка компонента
--------------------

[](#установка-компонента)

Компонент можно установить с помощью `composer`:

`"sorokinmedia/yii2-api-helpers": "dev-master"`

### Настройка компонента

[](#настройка-компонента)

В `common/config/main.php` добавить подключение компонента:

```
'apiHelpers' => [
    'class' => \sorokinmedia\api_helpers\ApiHelpersComponent::class,
    'authenticator_class' => \yii\filters\auth\HttpBearerAuth::class,
    'authenticator_excerpt' => [
        'options',
        'login',
        'check-token',
        'password-reset-request',
        'password-reset',
        'confirm-email',
        'check-login',
        'check-email',
        'register',
    ]
],

```

`authenticator_class` - класс, который будет использоваться для аутентификации

`authenticator_excerpt` - массив экшенов, для которых не будут применяться правила аутентификации

Настройки компонента `urlManager` в `api/config/main.php`:

```
'urlManager' => [
    'enablePrettyUrl' => true,
    'enableStrictParsing' => false,
    'showScriptName' => false,
    'rules' => \yii\helpers\ArrayHelper::merge(
        // классы имплементирующие RoutesInterface с описанием роутов
        \api\config\routes\RouteClass::getRoutes(),
        ...
    )
],

```

Настройка компонента `request` в `api/config/main.php`:

```
'request' => [
    'enableCookieValidation' => false,
    'enableCsrfValidation' => false,
    'parsers' => [
        'application/json' => \yii\web\JsonParser::class,
    ],
],

```

Настройка компонента `response` в `api/config/main.php`:

```
'response' => [
    'class' => 'yii\web\Response',
    'on beforeSend' => function ($event) {
        $response = $event->sender;
        if ($response->data !== null) {
            if(!empty($response->data['status']) && $response->data['status'] < 404) {
                if (isset($response->data['status']) && isset($response->data['name']) && isset($response->data['message'])) {
                    $response->data = [
                        'response' => null,
                        'messages' => [
                            new \sorokinmedia\api_helpers\ApiAnswer\RestMessage([
                                'type' => \sorokinmedia\api_helpers\ApiAnswer\RestMessage::TYPE_SERVER_ERROR,
                                'message' => $response->data['name'] . " : " . $response->data['message'],
                                'targetField' => null,
                            ]),
                        ],
                        'status' => (empty($response->data['status']) ? \sorokinmedia\api_helpers\Controller\ApiController::STATUS_ERROR : $response->data['status']),
                    ];
                }
            }
        }
    },
],

```

### Структура папок для API

[](#структура-папок-для-api)

```
api
    config                      конфигурация апи
        routes                  классы роутов, имплементирующие интерфейс RoutesInterface
    controllers                 контроллеры, определяющие уровень доступа
    modules                     модули апи (версионные модули v1, v2 и т .д.)
        v1                      модуль для первой версии API
            models              рестовые модели для описания структур данных
            modules             модули API, обычно разделенные по ролям пользователей

    runtime                     файлы сгенерированные в runtime
    tests                       тесты для API
    web                         содержит файл точки входа и вспомогательные ресурсы
        doc                     папка, со сгенерированной документацией apiDoc

```

Использование компонента
------------------------

[](#использование-компонента)

### Класс контроллера с уровнем доступа

[](#класс-контроллера-с-уровнем-доступа)

Контроллер впозволяет один раз опеределит уровень доступа ко всем дочерним контроллерам. Указывается список ролей, определнных в системе.

В примере показан контроллер с ограничением доступа "только для пользователей с ролью администратор":

```
