Найти в Дзене

Создание REST API на Yii 2: полный гайд с примерами кода

REST API на Yii 2 позволяет создавать масштабируемые сервисы для веб и мобильных приложений. Ниже разберём ключевые шаги от установки до полноценного API с авторизацией и CRUD-операциями. Для простоты используем Basic Template: composer create-project --prefer-dist yiisoft/yii2-app-basic yii2-rest-api
cd yii2-rest-api Проверка работы: php yii serve
# Перейдите на http://localhost:8080 В файле config/db.php: return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2_rest',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]; Создадим таблицу post: CREATE TABLE post (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
); Создадим модель через Gii или вручную: php yii gii/model --tableName=post --modelClass=Post Создаём PostController в папке controllers: namespace app\controllers;
use yii\rest\ActiveController;
class PostController extends
Оглавление

REST API на Yii 2 позволяет создавать масштабируемые сервисы для веб и мобильных приложений. Ниже разберём ключевые шаги от установки до полноценного API с авторизацией и CRUD-операциями.

1. Установка Yii 2 Advanced/Basic

Для простоты используем Basic Template:

composer create-project --prefer-dist yiisoft/yii2-app-basic yii2-rest-api
cd yii2-rest-api

Проверка работы:

php yii serve
# Перейдите на http://localhost:8080

2. Настройка базы данных

В файле config/db.php:

return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2_rest',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
];

Создадим таблицу post:

CREATE TABLE post (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Создадим модель через Gii или вручную:

php yii gii/model --tableName=post --modelClass=Post

3. Настройка REST контроллера

Создаём PostController в папке controllers:

namespace app\controllers;

use yii\rest\ActiveController;

class PostController extends ActiveController
{
public $modelClass = 'app\models\Post';

// Включаем аутентификацию по токену
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => \yii\filters\auth\HttpBearerAuth::class,
];
return $behaviors;
}
}

Маршруты добавляем в config/web.php:

'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'post'],
],
],

Теперь API доступен по адресу:

GET /posts
POST /posts
GET /posts/1
PUT /posts/1
DELETE /posts/1

4. Примеры запросов с cURL

Получить список постов:

curl -H "Authorization: Bearer <TOKEN>" http://localhost:8080/posts

Создать новый пост:

curl -X POST -H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{"title":"Новый пост","content":"Текст поста"}' \
http://localhost:8080/posts

Обновить пост:

curl -X PUT -H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{"title":"Обновлённый заголовок"}' \
http://localhost:8080/posts/1

5. Добавление аутентификации

Модель User (models/User.php) с токеном:

class User extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface
{
public static function findIdentityByAccessToken($token, $type = null)
{
return static::findOne(['access_token' => $token]);
}

// Остальные методы IdentityInterface
}

Создаём токен для пользователя:

UPDATE user SET access_token='your_generated_token' WHERE id=1;

6. Пример структуры REST API

+-----------------+
| /posts |
| GET | -> список постов
| POST | -> создать пост
+-----------------+
| /posts/{id} |
| GET | -> получить пост
| PUT | -> обновить пост
| DELETE | -> удалить пост
+-----------------+
| /users |
| GET, POST | -> управление пользователями
+-----------------+

Инфографика показывает логику взаимодействия фронтенда/мобильного приложения с сервером через REST API.

7. Советы по безопасности и оптимизации

  • Использовать HttpBearerAuth для аутентификации.
  • Включать валидацию данных в модели.
  • Ограничивать количество возвращаемых записей через DataProvider.
  • Кэшировать GET-запросы для часто запрашиваемых данных.

8. Дополнительно

Можно расширять функционал:

  • Добавить фильтры и поиск через yii\filters\SearchFilter.
  • Реализовать версионирование API (v1, v2).
  • Интегрировать Swagger/OpenAPI для документации.