Symfony 4. Создание RESTful приложения
Cоздадим полностью RESTful приложение на базе фреймворка Symfony 4. Поможет нам в этом компонент Symfony Flex. Также приложение будет брать данные из БД и сериализовать их для вывода данных. Итак начнем...
В первую очередь, вам нужно установить:
- php версии не ниже 7.1.3
- менеджер зависимостей composer
Далее скачиваем skeleton проект из packagist.org:
php composer.phar create-project symfony/skeleton symfony-restful-application
Переходим в папку со скаченным проектом:
cd symfony-restful-application/
Скачиваем symfony/web-server-bundle для запуска проекта:
php composer require server
Для получения доступа к мета-информации из комментариев по роутингу, установим бандл аннотаций sensio/framework-extra-bundle:
php composer require annotations
Так же нам пригодиться бандл для сериализации данных (jms/serializer-bundle), в т.ч объектов:
php composer require jms/serializer-bundle
При установке бандла jms/serializer-bundle, в отличие от предыдущих, необходимо будет вручную запустить "рецепт" , т.к данная библиотека помечена в Symfony Recipes Server как contrib, то есть неофициальный Symfony компонент.
При выводе такого сообщения:
The recipe for this package comes from the "contrib" repository, which is open to community contributions.
Review the recipe at https://github.com/symfony/recipes-contrib/tree/master/jms/serializer-bundle/2.0 Do you want to execute this recipe?
[y] Yes
[n] No
[a] Yes for all packages, only for the current installation session
[p] Yes permanently, never ask again for this project
(defaults to n): yes
Необходимо лишь прописать yes
Осталось уже чуть чуть, установим бандл friendsofsymfony/rest-bundle чтобы сделать полноценное RESTful приложение.
php composer require friendsofsymfony/rest-bundle
Для облегчения и ускорения разработки установим MakerBundle. Это очень крутая штука для генерации кода.
php composer.phar require generator
Создадим контроллер UsersController, для этого достаточно вызывать команду:
php bin/console make:controller
Данная команда работает в интерактивном режиме.
Choose a name for your controller class (e.g. TinyElephantController).
В качестве названия для контроллера выберем UsersController. Одним нажатием на ENTER, у нас создался полноценный контролер.
Congratulations!!! Теперь проверим работу нашего RESTful приложения . Имхо самый удобный инструмент для этого, это расширение для Chrome Postman.
Запустим наше приложение с помощью встроенного веб-сервера:
php bin/console server:start 0.0.0.0:8000 [OK] Server listening on http://0.0.0.0:8000
Откроем Postman и отправим GET/POST запрос по адресу http://0.0.0.0:8000/users . В ответ мы должны получить сообщение в формате JSON.
Самое простое RESTful приложение мы с вами создали. Немного ограничим возможности нашего API, с помощью friendsofsymfony/rest-bundle бандла. Сделаем так, чтобы брать в обработку только GET запрос для /users
Если в Postman cделать POST запрос, возникнет ошибка:
No route found for POST /users. Method Not Allowed (Allow: GET)
Усложним немного наше приложение, добавив возможность работы с БД. Для этого установим Doctrine бибилотеку:
php composer require doctrine
Выбрана данная библиотека из-за широкого функционала для работы с любой СУБД и хорошей интеграции с фреймоворком Symfony 4.
В качестве СУБД для проекта выберем Postgres, как одно из самых лучших open source решений на рынке.
Создадим в ней базу данных с именем rest_db.
После создания БД и установки symfony/orm-pack, необходимо изменить настройки в файле .env
Создадим новую сущность Users с помощью MakerBundle:
php bin/console make:enitiy
Создадим 2 поля:
- title -> string(255)
- actual -> boolean
В итоге у нас получится такой файл:
Насколько быстро теперь можно создавать код. Ощутили profit ???
Также необходимо изменить настройки для doctrine в файле config/packages/doctrine.yaml
Код мы создали, теперь на основе описанной сущности, необходимо создать миграцию. И конечно же сделаем мы это с помощью MakerBundle.
php bin/console make:migration
На основе изменений в файле src/Entity/Users.php будет создан файл src/Migrations/Version20180504133415.php
Теперь осталось только запустить миграции, чтобы создались необходимые сущности в БД.
php bin/console doctrine:migrations:migrate Migrating up to 20180504133415 from 0 ++ migrating 20180504133415 CREATE SEQUENCE users_id_seq INCREMENT BY 1 MINVALUE 1 START 1 CREATE TABLE users (id INT NOT NULL, title VARCHAR(255) NOT NULL, actual BOOLEAN NOT NULL, PRIMARY KEY(id))
++ migrated (0.27s) ------------------------ ++ finished in 0.27s
++ 1 migrations executed
++ 2 sql queries
Проверим, что теперь мы можем работать с новой сущностью Users:
php bin/console php bin/console doctrine:query:sql "SELECT id FROM users" array (size=0)
empty
Easy! Настолько просто теперь создавать сущности в БД, более того вы можете изменить сущность в коде, и на основе этих изменений будет создана новая миграция.
Если у вас, что либо не получилось, вы всегда можете скачать репозиторий symfony-flex-restful, каждый шаг оформлен в качестве отдельного коммита.
На этом все. Во второй части статьи, поговорим о выводе данных из БД, их сериализации и отправке их клиенту.
Также можете ознакомится с созданием уже graphQL приложения на основе Symfony в статье "PHP. Создание GraphQL приложения на Symfony 4"
Если вам помогла статья, пожалуйста перейдите по одному из рекламных блоков, расположенных на сайте. Таким образом вы поддержите проект. Спасибо