Как стать автором
Обновить

Упрощённое создание веб-сервиса при помощи Yii и Backvendor

image

Для веб-разработки существует довольно большое количество популярных PHP-дополнений, написанных для таких зарекомендовавших себя ветеранов, как Codelgniter, Prado, CakePHP, Yii. Что-то идет в персональную библиотеку «Must have», что-то воспринимается с большой долей скептицизма, сразу отсеивается или вообще не замечается.

На этом фоне хотелось бы рассказать о молодом, но на мой взгляд, очень перспективном проекте — Backvendor, написанном для Yii Framework.

Собственно, что же в нем интересного?



Основной задачей дополнения Backvendor является максимальная автоматизация начальной стадии проекта и освобождение разработчика от рутины при создании веб-сервиса. С помощью Backvendor и пары команд в консоли можно создать каркас для приложения, содержащее веб-сервис и админпанель; быстро настроить CRUD для каждой модели, указать связи между ними. Все это делается гораздо быстрей, чем при использовании стандартных средств Yii. Детальную информацию по этому поводу можно посмотреть как на самом сайте Yii framework так и на домашней страничке проекта. Для себя лично я выделил ряд особенностей Backvendor, которые на мой взгляд будут полезны всем.

Возможности Backvendor



1) Ускорение процесса разработки. Достаточно прописать одну консольную команду, чтобы создать скелет будущего приложения.
2) Дополнение полностью объектно-ориентированное.
3) Кодирование CRUD для back-end сводится к генерации моделей active record и описыванию параметров в конфиге.
4) Валидация форм.
5) Автоматическое создание веб-сервиса поддерживающее JSON API.
6) Функция автодокументирования кода.
7) Поддержка API версионирования.
8) Возможность создания функциональных тестов для разработки приложения в стиле TDD, что позволяет еще больше укоротить цикл.
9) Развертывание кода на сервере используя Phing.

Создание веб-сервиса



image

Теперь давайте рассмотрим, как же все это работает. Ниже привожу с комментариями создание базового веб-сервиса с админкой и фрагменты кода.

ВНИМАНИЕ: данное приложение будет создано исключительно в демонстрационных целях и никакой логики не несет! Все желающие могут скачать код демо-приложения здесь.

Шаг 1.


Скачиваем само раcширение Backvendor отсюда и кладем его в папку с веб доступом (я не менял ее название с Backvendor). После этого в командной строке пишем:

cd /path/to/webroot/Backvendor
php bviic.php createmultiapp --path=»/path/to/webroot/my-demo-project»

Легким движением руки мы получаем новый проект, который находится в папке my-demo-project. Он уже содержит структуру приложения, базовые классы и требует от вас только необходимых настроек. Проект состоит из таких частей:
1. applications — тут лежат 2 приложения — админпанель и веб-сервис а также папка images для хранения общих картинок;
2. core — общий код для всех приложений;
3. framework — собственно сам Yii Framework.

Шаг 2.


Перед началом работы нужно применить миграции к вашей базе данных (естественно БД нужно создать заранее и настроить доступ к ней в core/config/db.php). Это делается двумя командами в консоли:

cd /var/www/my-demo-project/applications/backend/protected php yiic migrate

Шаг 3.


Займёмся настройкой админпанели (моделями и расстановкой связей между ними).
В новом проекте вам нужно будет генерировать модели для необходимых таблиц при помощи Gii Tool. Его настройки находятся в файле /core/config/main.php. При генерации моделей выставляем путь для них «core.models»

Основные настройки для CRUD и моделей находятся в файле backend/protected/controllers/SiteController.php в функции reconfigureEntityParamsDictionary. Для данного демо-проекта эта функция выглядит так:

self::$entityConfigDictionary = CMap::mergeArray(
parent::$entityConfigDictionary, array(
'user' => array(
'modelName' => 'User',
'excludeFromGridView' => array(
'password', 'salt',
),
'excludeFromDetailView' => array(
'password', 'salt',
),
'modelAlias' => 'Blog User',
'modelAliasPlural' => 'Blog Users',
'bool' => array('admin'),
'datetime' => array('creation_date'),
'images' => array('image'),
'title' => 'username',
'link' => array(
'fb_link' => 'http://www.facebook.com/profile.php?id={value}'
),
'password' => array('password'),
'dropDown' => array(
'role' => array(
1 => 'Publisher',
2 => 'Moderator',
3 => 'Writer',
),
),
'maxUploadedImageSize' =>
array('width' => 200, 'height' => 200),
'selectable' => 2,
'nuke'=>true
),
'post' => array(
'modelName' => 'Post',
'notUseTitleOfRelation' => array('author'),
),
'postCategory' => array(
'modelName' => 'PostCategory',
'linksManyToManyRelation' => array('post', 'category')
),
'category' => array(
'modelName' => 'Category',
'modelAliasPlural' => 'Categories',
),
));
}

Вот и Все.

Каждый ключ в этом массиве (User, Post и т. д.) — название сущности. Описание настроек есть в документации по расширению.
Правильно сконфигурировав сущности вам не придётся создавать вручную CRUD для них, также не придётся и редактировать модели. Всю работу на себя берет массив с настройками.

Что касается веб-сервиса — как вы наверное догадались он лежит в папке apllication/webservice. Основная логика находится в ApiController.php, здесь вы указываете Api методы, которые будут вызываться клиентом.

В качестве формата общения между сервером и клиентом используется JSON.

Backvendor предполагает использование следующей архитектуры для веб-сервиса:
1) каждый запрос валидируется отдельной моделью в которой прописываются правила валидации для каждого параметра в запросе;
2) вся логика находится в соответствующих компонентах, контроллер отвечает только за выдачу ответа клиенту.

На мой взгляд, очень хорошее и продуманное архитектурное решение. Также вы можете сделать версионирование вашего API, как это сделать также написано в документации.

Выводы:



Довольно простое в обращении и работе дополнение, которое, как мне кажется, займёт достойное место среди инструментария разработчиков. Работает шустро, как видно выше из пошагового описания — требует минимум времени и дает хорошие результаты. Порывшись на сайте, привожу, на мой взгляд, самые полезные ссылки, на что стоит обратить внимание. Дерзайте!

Куча ссылок:


1) Детальная информация о проекте доступна тут

2) Проектная документация (доступна только на английском):

Полный перечень документов;
Как и что лучше располагать в проекте ;
Документация по API;
Развертывание кода

3) Что и где скачать

Backvendor доступен для скачивания тут;
Демо-версия проекта
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.