Переопределяя методы fields () и extraFields () , вы можете определить, какие данные можно вставить в ответ. Разница между этими двумя методами заключается в том, что первый определяет набор полей по умолчанию, который должен быть включен в ответ, в то время как последний определяет дополнительные поля, которые могут быть включены в ответ, если конечный пользователь запрашивает их через параметр запроса расширения. ,
Шаг 1 — Модифицируйте модель MyUser таким образом.
<?php namespace app\models; use app\components\UppercaseBehavior; use Yii; /** * This is the model class for table "user". *@property integer $id * @property string $name * @property string $email */ class MyUser extends \yii\db\ActiveRecord { public function fields() { return [ 'id', 'name', //PHP callback 'datetime' => function($model) { return date("d:m:Y H:i:s"); } ]; } /** * @inheritdoc */ public static function tableName() { return 'user'; } /** * @inheritdoc */ public function rules() { return [ [['name', 'email'], 'string', 'max' => 255] ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => 'ID', 'name' => 'Name', 'email' => 'Email', ]; } } ?>
Помимо полей по умолчанию: id и name, мы добавили настраиваемое поле — datetime .
Шаг 2. В Postman запустите URL-адрес http: // localhost: 8080 / users .
Шаг 3 — Теперь измените модель MyUser таким образом.
<?php namespace app\models; use app\components\UppercaseBehavior; use Yii; /** * This is the model class for table "user". * * @property integer $id * @property string $name * @property string $email */ class MyUser extends \yii\db\ActiveRecord { public function fields() { return [ 'id', 'name', ]; } public function extraFields() { return ['email']; } /** * @inheritdoc */ public static function tableName() { return 'user'; } /** * @inheritdoc */ public function rules() { return [ [['name', 'email'], 'string', 'max' => 255] ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => 'ID', 'name' => 'Name', 'email' => 'Email', ]; } } ?>
Обратите внимание, что поле электронной почты возвращается методом extraFields () .
Шаг 4 — Чтобы получить данные с помощью этого поля, запустите http: // localhost: 8080 / users? Expand = email .
Настройка действий
Класс yii \ rest \ ActiveController предоставляет следующие действия:
-
Индекс — список ресурсов страница за страницей
-
Просмотр — возвращает сведения об указанном ресурсе.
-
Создать — Создает новый ресурс
-
Обновление — обновляет существующий ресурс
-
Удалить — удаляет указанный ресурс
-
Параметры — возвращает поддерживаемые методы HTTP.
Индекс — список ресурсов страница за страницей
Просмотр — возвращает сведения об указанном ресурсе.
Создать — Создает новый ресурс
Обновление — обновляет существующий ресурс
Удалить — удаляет указанный ресурс
Параметры — возвращает поддерживаемые методы HTTP.
Все вышеперечисленные действия объявляются в методе actions ().
Чтобы отключить действия «удалить» и «создать», измените UserController следующим образом:
<?php namespace app\controllers; use yii\rest\ActiveController; class UserController extends ActiveController { public $modelClass = 'app\models\MyUser'; public function actions() { $actions = parent::actions(); // disable the "delete" and "create" actions unset($actions['delete'], $actions['create']); return $actions; } } ?>
Обработка ошибок
При получении запроса RESTful API, если в запросе произошла ошибка или что-то неожиданное произошло на сервере, вы можете просто вызвать исключение. Если вы можете определить причину ошибки, вы должны сгенерировать исключение вместе с правильным кодом состояния HTTP. Yii REST использует следующие статусы —
200 — ОК.
201 — ресурс был успешно создан в ответ на запрос POST. Заголовок Location содержит URL, указывающий на вновь созданный ресурс.
204 — Запрос был обработан успешно, и ответ не содержит содержимого.
304 — ресурс не был изменен.
400 — Плохой запрос.
401 — Ошибка аутентификации.
403. — Аутентифицированному пользователю не разрешен доступ к указанной конечной точке API.
404 — Ресурс не существует.
405 — Метод не разрешен.
415 — неподдерживаемый тип носителя.
422 — Проверка данных не удалась.
429 — Слишком много запросов.
500 — Внутренняя ошибка сервера.