@@ -18,7 +18,8 @@ Yii включает полноценный набор средств для у
...
@@ -18,7 +18,8 @@ Yii включает полноценный набор средств для у
Рассмотрим пример, как можно настроить Yii под RESTful API, приложив при этом минимум усилий.
Рассмотрим пример, как можно настроить Yii под RESTful API, приложив при этом минимум усилий.
Предположим, вы захотели RESTful API для данных по пользователям. Эти данные хранятся в базе данных и для работы с ними вами была ранее создана модель [[yii\db\ActiveRecord|ActiveRecord]] (класс `app\models\User`).
Предположим, вы захотели RESTful API для данных по пользователям. Эти данные хранятся в базе данных и для работы с ними
вами была ранее создана модель [[yii\db\ActiveRecord|ActiveRecord]] (класс `app\models\User`).
## Создание контроллера <a name="creating-controller"></a>
## Создание контроллера <a name="creating-controller"></a>
...
@@ -36,14 +37,14 @@ class UserController extends ActiveController
...
@@ -36,14 +37,14 @@ class UserController extends ActiveController
}
}
```
```
Как видно из вышеприведённого кода, класс контроллера наследуется от [[yii\rest\ActiveController]].
Класс контроллера наследуется от [[yii\rest\ActiveController]]. Мы задали [[yii\rest\ActiveController::modelClass|modelClass]]
Так же мы указали [[yii\rest\ActiveController::modelClass|modelClass]] как `app\models\User`, тем самым рассказав контроллеру,
как `app\models\User`, тем самым указав контроллеру, к какой модели ему необходимо обращаться для редактирования или
к какой модели ему необходимо обращаться для редактирования или выборки данных.
выборки данных.
## Настройка URL правил <a name="configuring-url-rules"></a>
## Настройка правил URL <a name="configuring-url-rules"></a>
Для того, чтобы можно было обращаться к действиям контроллера, используя различные методы HTTP (GET, POST, HEAD и т.д.), необходимо настроить компонент `urlManager`. Настаивается он в конфигурационном файле приложения с помощью следующего кода:
Далее изменим настройки компонента `urlManager` в конфигурации приложения:
```php
```php
'urlManager'=>[
'urlManager'=>[
...
@@ -56,9 +57,12 @@ class UserController extends ActiveController
...
@@ -56,9 +57,12 @@ class UserController extends ActiveController
]
]
```
```
Настройки выше добавляет правило для контроллера `user`, которое предоставляет доступ к данным пользователя через красивые
URL и логичные глаголы HTTP.
## Пробуем <a name="trying-it-out"></a>
## Пробуем <a name="trying-it-out"></a>
Вот так просто мы и создали RESTful API для доступа к данным `User`. Api нашего сервиса, сейчас включает в себя:
Вот так просто мы и создали RESTful API для доступа к данным пользователя. Api нашего сервиса, сейчас включает в себя:
*`GET /users`: получение постранично списка всех пользователей;
*`GET /users`: получение постранично списка всех пользователей;
> Подсказка: Вы также можете получить доступ к API, через веб-браузер, введя этот адрес `http://localhost/users`. Но в этом случае, скорее всего, вам потребуются некоторые плагины для браузера, чтобы передать определенные заголовки запросов.
> Подсказка: Вы можете получить доступ к API через веб-браузер, введя адрес `http://localhost/users`. Но в этом случае,
для передачи определённых заголовков вам, скорее всего, потребуются дополнительные плагины для браузера.
Если внимательно посмотреть результат ответа, то можно обнаружить, что в
Если внимательно посмотреть результат ответа, то можно обнаружить, что в заголовках есть информация об общем числе записей,
заголовках есть информация о суммарном подсчете, количество страниц и т.д.
количестве страниц и т.д. Тут так же можно обнаружить ссылки на другие страницы, как, например,
Тут так же можно обнаружить ссылки на другие страницы, например как эта
`http://localhost/users?page=2`. Перейдя по ней можно получить вторую страницу данных пользователей.
`http://localhost/users?page=2`, перейдя по которой можно получить вторую страницу
данных по пользователям.
Используя `fields` и `expand` параметры в url адресе, можно также указать, какие поля должны быть включены в результат.
Используя параметры `fields` и `expand` в URL, можно указать, какие поля должны быть включены в результат. Например,
Например, перейдя по адресу `http://localhost/users?fields=id,email` мы получим информацию по пользователям, которая будет содержать только `id` и `email`.
по адресу `http://localhost/users?fields=id,email` мы получим информацию по пользователям, которая будет содержать
только `id` и `email`.
> Информация: Вы наверное заметили, что при обращении по `http://localhost/users` мы получаем информацию с полями, которые нежелательно показывать,
> Информация: Вы наверное заметили, что при обращении к `http://localhost/users` мы получаем информацию с полями,
> такие как `password_hash`, `auth_key`.
> которые нежелательно показывать, такими как `password_hash` и `auth_key`. Вы можете и должны отфильтровать их как
> Их скрыть очень просто. Для этого обратитесь к
> описано в разделе «[Форматирование ответа](rest-response-formatting.md)».
Использования Yii в качестве RESTful API фреймворка, мы используем действия контроллеров, как различные методы API, с помощью которых происходит обращение к определённому ресурсу.
Используя Yii в качестве RESTful API фреймворка, мы используем реализуем точки входа API как действия контроллеров.
Контроллер используется для организации действий, которые относятся к определённому типу ресурса.
Ресурсы представлены в виде моделей данных, которые наследуются от класса [[yii\base\Model]].
Ресурсы представлены в виде моделей данных, которые наследуются от класса [[yii\base\Model]].
Если необходима работа с базами данных (реляционные или NoSQL), то рекомендуется использовать [[yii\db\ActiveRecord|ActiveRecord]] в качестве модели.
Если необходима работа с базами данных (как с реляционными, так и с NoSQL), рекомендуется использовать для представления
ресурсов [[yii\db\ActiveRecord|ActiveRecord]].
Используйте [[yii\rest\UrlRule]] для настройки маршрутизации конечных url для API.
Хоть это не обязательно, но рекомендуется отделять RESTful APIs приложения от основного веб-приложения. Такое разделение легче обслуживается.
Вы можете использовать [[yii\rest\UrlRule]] для упрощения маршрутизации точек входа API.
Хоть это не обязательно, рекомендуется отделять RESTful APIs приложение от основного веб-приложения. Такое разделение