Лаб. работа “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:
Затем выполните команду composer update
, чтобы установить бандлы.
Шаг 2. Настройка FOSRestBundle
После установки FOSRestBundle, вам нужно настроить его в файле config/packages/fos_rest.yaml:
fos_rest:
body_listener: true
format_listener: true
param_fetcher_listener: true
view:
view_response_listener: 'force'
formats:
json: true
xml: true
Эта конфигурация включает в себя слушателей событий, которые будут автоматически преобразовывать входящие и исходящие данные в нужный формат.
Шаг 3. Создание контроллера
Далее нам нужно создать контроллер, который будет обрабатывать запросы к нашему REST API. Создайте новый файл src/Controller/Api/BookController.php и добавьте следующий код:
namespace App\Controller\Api;
use App\Entity\Book;
use App\Repository\BookRepository;
use FOS\RestBundle\Controller\AbstractFOSRestController;
use FOS\RestBundle\Controller\Annotations as Rest;
use Nelmio\ApiDocBundle\Annotation\Model;
use Swagger\Annotations as SWG;
use Symfony\Component\HttpFoundation\Response;
class BookController extends AbstractFOSRestController
{
/**
* @Rest\Get("/api/books", name="api_books_get_collection")
* @SWG\Response(
* response=200,
* description="Returns a collection of books",
* @Model(type=Book::class, groups={"book_read"})
* )
*/
public function getBooks(BookRepository $repository): array
{
return $repository->findAll();
}
}
Этот контроллер содержит один метод getBooks
, который возвращает коллекцию книг. Метод аннотирован с помощью FOSRestBundle и NelmioApiDocBundle. Аннотация @Rest\Get
указывает, что этот метод обрабатывает GET-запросы по адресу /api/books. Аннотация @SWG\Response
описывает ответ сервера в формате Swagger.
Шаг 4. Создание сущности
Далее нам нужно создать сущность Book, которая будет представлять книгу. Создайте новый файл src/Entity/Book.php и добавьте следующий код:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as Serializer;
/**
* @ORM\Entity(repositoryClass="App\Repository\BookRepository")
*/
class Book
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Serializer\Groups({"book_read"})
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @Serializer\Groups({"book_read"})
*/
private $title;
/**
* @ORM\Column(type="string", length=255)
* @Serializer\Groups({"book_read"})
*/
private $author;
// getters and setters
}
Эта сущность содержит три поля: 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.