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, каждый шаг оформлен в качестве отдельного коммита.

На этом все. Во второй части статьи, поговорим о выводе данных из БД, их сериализации и отправке их клиенту.

Если вам помогла статья, пожалуйста перейдите по одному из рекламных блоков, расположенных на сайте. Таким образом вы поддержите проект. Спасибо

© Krenar 2020. All right reserved.