Лаб. работа "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.

← Лаб. работа "Сервисы и зависимости в Symfony" Лаб. работа "Работа с медиа контентом в … →