Fuelphp в полевых условиях

в 10:55, , рубрики: api, framework, fuel, fuelphp, php, ооп, фреймфорк, метки: , , , ,

Приветствую вас, читатели и интересующиеся. Написание этого поста было делом времени, поэтому не стал откладывать и решил написать сейчас. Ранее я уже публиковал описание возможностей Fuelphp. На тот момент я только создал русский сайт документации, группу, написал несколько тестовых приложений на данном фримворке.

В этой статье хочу поделиться своим опытом использования данного инструмента в реальном проекте. Нужно было сделать удаленную админ панель и через api реализовать управление сайтами-клиентами. Требования: модульность, оптимизация под нагрузки, использование API Youtube, ЧПУ.


Далее я буду указывать конкретную задачу, а напротив опишу какие инструменты использовались и насколько эффективно:

1. Авторизация пользователей, в том числе и через соцсети vk и facebook: Auth+oAuth+oAuth2: установил через oil два недостающих пакета, подключил в конфиге, через oil запустил миграцию — после чего создались необходимые таблички в бд. Все заработало как часы, vk драйвера не было, написал за 10 минут.

2. Организация шаблонов: От шаблонизаторов отказался в пользу оптимизации. Было две идеи как лучше организовать шаблоны. Первая заключалась в том, что бы определять «виджеты» в базовом контроллере и далее наследоваться от него. Вторая это реализовать «виджеты» как отдельные модули и выполнять их вставку при помощи HMVC запроса. Первая показалась мне более простым и лаконичным решением, так как все «виджеты» так или иначе нуждались в данных из бд, причем одних и тех-же. Тем более, что эти данные могли быть собраны в один большой закэшированый запрос. Не знаю насколько правильное решение я принял, но пока я не столкнулся с какими либо-проблемами, а кэширование запросов повысило скорость почти в 10 раз.

3. Кириллические ЧПУ: 5 минут времени, это действительно быстро. urlencode() — urldecode()

4. Генерация Sitemap: в стандартный пакетах обнаружен не был. Вот тут то и раскрывается вся прелесть пакетов(пакет-package). Вбил в google что то вроде sitemap gen php нашел подходящий класс, через пять минут у меня уже был пакет fuelsitemap. Делать пакеты в fuel проще простого, стоит сделать хотя бы один и остановиться уже невозможно.

5. Реализация админки: тут было решено назначить приоритет скорости, так как backend же) Был выбран extjs4 в надежде на скорость разработки и надежность. Воссоединился с fuel как родной. Однако больше extJs4 я ипользовать не буду. Это трехметровый ящик с инструментами, можно сделать все, и если постоянно с ним работаешь он экономит время, а ты наконец запоминаешь что и где лежит у него внутри. Сюда же можно отнести апдейты, которые часто могут ломать обратную совместимость, представьте что будет, если вы время от времени используете extjs недостаточно хорошо разбираясь в его внутренностях. Хорошее решение для студии где над ui занят один два человека.

6. Api админки: В Fuelphp есть несколько контроллеров это обычный Controller, для реализации шаблонов Сontroller_Template(назначается базовый шаблон через переменную $template). Для возвращения xml, json, serialize и других форматов используется либо Controller_Rest, либо Controller_Hibryd(Сontroller_Template+Controller_Rest). Причем вам не нужно нигде ничего дополнительно прописывать, просто подставляете .json или .serialize и т.д. Когда вызываете метод он сам конвертирует в нужный формат данные, внутри метода данные определяются в виде массива.

6.1 Безопасность API: Далее встал вопрос о мерах безопасности при передаче данных. Во первых было решено применить шифрование данных по ключу, во вторых сменить метод запроса с get на post. В третьих ввести доступ по паролям, которые передавались в самих данных и в заголовке сервера, разумеется также шифрованные по ключу.
Для шифрования был использован Crypt из fuelphp, а вот для передачи данных и заголовков мне захотелось использовать CURL. Схема была стандартной google -> выбор подходящей обертки -> делаю пакет -> использую.

7. Использование API Youtube: тут помог ранее созданный пакет fuelcurl(так я его назвал) Данная задача включала в себя по большей части логику, которая могла пригодиться в следующем проекте, поэтому не хотелось «зашивать» в методах контроллера данное решение. А что бы я смог легко и непринужденно использовать этот функционал в следующих проектах был создан отдельный пакет fuelyoutube.

8. Оптимизация:
Сервер
— nginx.
Код
— Стандартными возможностями кэшировал отдельные запросы к бд.
— Api Yotube — запрос к api происходит один раз, затем берется из базы как кэш.
— Подключил файловый кэш.
Мне показалось достаточным использование данных мер, по крайней мере на данном этапе. Хотя я понимаю, что это ещё далеко не предел оптимизации нагрузки.

На всю разработку у меня ушли две недели.

Заметки:
— Получилась гибкое приложение, где почти вся мало мальски реюзабельная логика перенесена в отдельные пакеты с целью реюзать её в следующих проектах. Пакеты это нечто постоянное и переносимое из проекта в проект. Делаешь раз и решение никуда не пропадает — это действительно потрясающе.
— Сами контроллеры лишь выполняют проверки и направляют действия.
— Большое преимущество пакетов в том, что вы можете реюзать логику везде, в шаблоне, в контроллере, в модуле.
— За все время использования фримворка обновлял ядро несколько раз — обратная совместимость не ломалась, обновление сводилось к копипасту с заменой папки core.
— Fuel на столько прост на сколько того хочешь, например я мало использую unit тестирование, oil console, разделение разработки на dev и production, oil migration и многое другое. Но я знаю одно — когда они мне понадобятся, то я с легкостью начну их применять, так как в Fuelphp нет ничего сложного.

Автор: MaxZN

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js