Лаб. работа "REST API в Symfony"
В этой лабораторной работе мы изучим, как создавать REST API в Symfony. REST (Representational State Transfer) - это архитектурный стиль, который используется для создания веб-сервисов. API (Application Programming Interface) - это набор правил, протоколов и инструментов для создания программного обеспечения.
В Symfony есть множество инструментов и бандлов, которые могут помочь нам создать REST API. В этой лабораторной работе мы будем использовать FOSRestBundle и NelmioApiDocBundle.
FOSRestBundle - это бандл, который предоставляет множество инструментов для создания REST API в Symfony. Он предоставляет контроллеры, слушателей событий, сериализаторы и многое другое.
NelmioApiDocBundle - это бандл, который автоматически генерирует документацию для нашего REST API. Он использует аннотации в нашем коде, чтобы создать документацию в формате JSON или HTML.
Шаг 1. Установка FOSRestBundle и NelmioApiDocBundle
Для установки FOSRestBundle и NelmioApiDocBundle, вам нужно добавить следующие строки в файл composer.json:
1{
2 "require": {
3 "friendsofsymfony/rest-bundle": "^2.8",
4 "nelmio/api-doc-bundle": "^4.0"
5 }
6}
Затем выполните команду composer update, чтобы установить бандлы.
Шаг 2. Настройка FOSRestBundle
После установки FOSRestBundle, вам нужно настроить его в файле config/packages/fos_rest.yaml:
1fos_rest:
2 body_listener: true
3 format_listener: true
4 param_fetcher_listener: true
5 view:
6 view_response_listener: 'force'
7 formats:
8 json: true
9 xml: true
Эта конфигурация включает в себя слушателей событий, которые будут автоматически преобразовывать входящие и исходящие данные в нужный формат.
Шаг 3. Создание контроллера
Далее нам нужно создать контроллер, который будет обрабатывать запросы к нашему REST API. Создайте новый файл src/Controller/Api/BookController.php и добавьте следующий код:
1namespace App\Controller\Api;
2
3use App\Entity\Book;
4use App\Repository\BookRepository;
5use FOS\RestBundle\Controller\AbstractFOSRestController;
6use FOS\RestBundle\Controller\Annotations as Rest;
7use Nelmio\ApiDocBundle\Annotation\Model;
8use Swagger\Annotations as SWG;
9use Symfony\Component\HttpFoundation\Response;
10
11class BookController extends AbstractFOSRestController
12{
13 /**
14 * @Rest\Get("/api/books", name="api_books_get_collection")
15 * @SWG\Response(
16 * response=200,
17 * description="Returns a collection of books",
18 * @Model(type=Book::class, groups={"book_read"})
19 * )
20 */
21 public function getBooks(BookRepository $repository): array
22 {
23 return $repository->findAll();
24 }
25}
Этот контроллер содержит один метод getBooks, который возвращает коллекцию книг. Метод аннотирован с помощью FOSRestBundle и NelmioApiDocBundle. Аннотация @Rest\Get указывает, что этот метод обрабатывает GET-запросы по адресу /api/books. Аннотация @SWG\Response описывает ответ сервера в формате Swagger.
Шаг 4. Создание сущности
Далее нам нужно создать сущность Book, которая будет представлять книгу. Создайте новый файл src/Entity/Book.php и добавьте следующий код:
1namespace App\Entity;
2
3use Doctrine\ORM\Mapping as ORM;
4use JMS\Serializer\Annotation as Serializer;
5
6/**
7 * @ORM\Entity(repositoryClass="App\Repository\BookRepository")
8 */
9class Book
10{
11 /**
12 * @ORM\Id()
13 * @ORM\GeneratedValue()
14 * @ORM\Column(type="integer")
15 * @Serializer\Groups({"book_read"})
16 */
17 private $id;
18
19 /**
20 * @ORM\Column(type="string", length=255)
21 * @Serializer\Groups({"book_read"})
22 */
23 private $title;
24
25 /**
26 * @ORM\Column(type="string", length=255)
27 * @Serializer\Groups({"book_read"})
28 */
29 private $author;
30
31 // getters and setters
32}
Эта сущность содержит три поля: id, title и author. Аннотация @Serializer\Groups указывает, какие поля должны быть сериализованы при выводе сущности.
Шаг 5. Тестирование REST API
Теперь наш REST API готов к тестированию. Запустите встроенный веб-сервер Symfony с помощью команды php bin/console server:start. Затем откройте в браузере адрес http://localhost:8000/api/books. Вы должны увидеть коллекцию книг в формате JSON.
Шаг 6. Документация REST API
NelmioApiDocBundle автоматически генерирует документацию для нашего REST API. Запустите встроенный веб-сервер Symfony с помощью команды php bin/console server:start. Затем откройте в браузере адрес http://localhost:8000/api/doc. Вы должны увидеть документацию в формате Swagger.
Заключение
В этой лабораторной работе мы изучили, как создавать REST API в Symfony с помощью FOSRestBundle и NelmioApiDocBundle. Мы создали контроллер, сущность и настроили документацию. Теперь вы можете использовать эти знания для создания своих REST API в Symfony.