Статьи

Создание приложения Micro Markdown API с помощью Lumen

Если вы использовали Laravel некоторое время, вы знаете, что иногда оно кажется немного тяжелым для небольшого приложения или службы. Для этой же цели Тейлор, создатель Laravel, построил Lumen . Небольшой микро-фреймворк, построенный поверх компонентов Laravel Illuminate, по умолчанию он не загружает все компоненты, такие как Eloquent, Blade, Middleware и т. Д., Оставаясь легким при загрузке. Мы рассмотрим все это в этом коротком уроке.

Lumen Header

Почему люмен?

Если вы уже являетесь пользователем Laravel, возможно, вы влюблены в синтаксис и ярлыки Laravel. Но, работая с небольшим приложением, вы не хотите иметь полностью стековую структуру со всеми пакетами. Lumen обеспечивает хорошую отправную точку для вашего небольшого приложения, удаляя все части, которые вам, вероятно, не понадобятся.

Что мы строим

Чтобы проиллюстрировать практический пример использования микро-фреймворка, мы создадим приложение API анализатора Markdown, в котором пользователь может отправить текст Markdown и вернуть проанализированный контент в формате JSON. Я буду использовать пакет league / commonmark от PHP League. Вы можете проверить окончательный результат на Github .

Установка

Если вы часто создаете новые приложения, вы можете использовать глобальный установщик ( composer global require "laravel/lumen-installer=~1.0" ) и воспользоваться коротким синтаксисом, таким как lumen new my-project , или вы можете использовать composer для создания новый проект с composer create-project laravel/lumen my-project --prefer-dist . Вы можете прочитать больше о процессе установки в документации .

После установки Lumen вы можете продолжить и потребовать пакет commonmark , используя composer require league/commonmark . Посетите документацию для получения дополнительной информации об этом.

Структура папок

Первое, что вы заметите после установки Lumen — это структура папок. Удаляется множество вещей, таких как config , database и resources , которые могут быть возвращены при необходимости с помощью некоторых команд scaffolding или вручную.

Lumen предоставляет вам команду php artisan make которая поможет вам восстановить отсутствующие папки. Если вы хотите работать с шаблонами представлений, вы можете запустить php artisan make views чтобы создать папку resources/views для ваших шаблонов. Доступные команды можно найти в классе Laravel\Lumen\Console\Commands\MakeCommand .

  • php artisan make foundation : подготовить resources и папки database .
  • php artisan make resources : php artisan make resources папку resources .
  • php artisan make database : php artisan make database папку database .
  • php artisan make lang : php artisan make lang папку resources/lang .
  • php artisan make views : php artisan make views папку resources/views .

Разбор уценки

 // app/Http/routes.php $app->get('/parse', 'App\Http\Controllers\MarkdownController@parse'); 
 // app/Http/Controllers/MarkdownController.php public function parse(Request $request, CommonMarkConverter $parser) { $text = $request->get('text'); $result = $parser->convertToHtml($text); return ['html' => $result]; } 

После того, как пользователь отправит текст Markdown в нашу конечную точку /parse , мы извлечем содержимое из объекта запроса и проанализируем его. Вы заметили, что мы воспользовались подсказкой типа контейнера службы для разрешения объектов уценки и запроса. Если вы решили использовать Фасады ( Request::get('text') ), просто убедитесь, что ваше приложение загрузило их (см. Следующий раздел).

HTML result

Фасады, Eloquent и Middleware

Поскольку фасады, Eloquent ORM и Middleware обычно используются в приложениях Laravel, мы добавили их по умолчанию в наш файл bootstrap/app.php и нам нужно только раскомментировать их перед началом их использования.

 // bootstrap/app.php $app->withFacades(); $app->withEloquent(); $app->middleware([ //... ]); 

Если ваше приложение должно включать другие службы, вы можете использовать $app->register('AppServiceProvider'); синтаксис для регистрации списка провайдеров.

Вообще говоря, большинство компонентов Lumen работают так же, как и в Laravel, они либо не загружены по умолчанию, либо должны быть установлены и подключены к приложению. Например, вы можете использовать пакет FileSystem Laravel как обычно ( Storage::disk('local')->put('file.txt', 'Content here'); ), и он будет работать как положено. Однако, если вы хотите работать с Rackspace, вам нужно league/flysystem-rackspace пакет league/flysystem-rackspace с помощью Composer и указать свои учетные данные в файле .env .

Использование API

После того, как наш сервис запущен, мы можем использовать наш API, используя Guzzle или любой другой пакет или метод, который вы предпочитаете.

 $client = new GuzzleHttp\Client(); $response = $client->get('http://vaprobash.dev/parse', [ 'query' => ['text' => file_get_contents('myFile.md')] ])->json(); $html = $response->html; 

Если часть вашего сервиса получает много трафика, имеет смысл иметь легкую микро-инфраструктуру для обработки этой части приложения без необходимости загружать все доменные имена и пакеты для выполнения простой задачи.

Вывод

Lumen вернет некоторых фанатов Laravel, которые не любят использовать полный фреймворк для небольших задач. Вы можете проверить документацию для получения дополнительной информации. Если вы уже пробовали Lumen, я хотел бы узнать ваши первые впечатления о нем и о преимуществах, которые вы думаете, он имеет по сравнению с другими микро-фреймворками?