Как сделать REST API на Symfony в PHP. Полный гайд для разработчиков backend
Вставка
- Опубліковано 15 лип 2024
- В этом видео мы построим учебное приложение реализующее REST API. Для этого мы научимся отдавать данные в JSON. Разберемся с тем как работает компонет Symfony/Serializer. Также обработаем запрос POST с телом запроса в формате JSON. Сначала сделаем это с помощью обычной Symfony/Form формы. Далее попробуем это сделать через специальный Dto объект. Также полученные контроллеры покроем функциональными Unit тестами.
Все видео курса в плейлисте:
• Symfony фреймворк
REST API - это интерфейс программирования приложений (API), который использует принципы архитектуры REST (Representational State Transfer) для обмена данными между клиентом и сервером посредством стандартных HTTP-запросов, таких как GET, POST, PUT, DELETE. Он позволяет клиентам получать, отправлять, изменять и удалять данные на удаленном сервере.
REST API обычно строится вокруг ресурсов (например, пользователей, продуктов, заказов), каждый из которых имеет уникальный идентификатор (URI). Данные передаются в формате JSON или XML, обеспечивая гибкость и универсальность.
Преимущества REST API включают простоту использования, масштабируемость, гибкость и независимость от платформы. Он широко используется для создания веб-сервисов, мобильных приложений и интеграции различных систем.
00:00 Что будем делать и что такое REST API
03:00 Разбираемся с программой Postman
05:30 Делаем первый REST API запрос к серверу на Symfony 6 PHP
06:30 Делаем первый метод контроллера который возвращает JsonResponse
08:00 Использование переменных среды в Postman
10:00 Использование Symfony/Serializer для конвертации данных в JSON. Настройка в services.yml
13:00 Работа аттрибута [Ignore] для скрытия полей сущности в JSON ответе сервера
23:00 Добавление групп валидации для разной конвертации данных в json
30:00 Делаем добавление блога через JSON запрос и стандартную форму Symfony
35:00 Логин в систему через JSON запрос используя стандартную авторизацию Symfony
38:00 Краткий обзор LexikJWTAuthenticationBundle для перевода авторизации на JWT
40:00 Использование HTTP метода DELETE для удаления данных. Удаляем блог по REST API запросу
45:00 Использование возможностей Symfony 6 для маппинга query string в объект. Аттрибут [MapQueryString]
46:30 Переделываем фильтр блогов BlogFilter с помощью [MapQueryString]
47:00 Как экспортировать коллецию Postman в JSON файл
49:00 Исправляем проблему с настройками Serializer в services.yml
55:00 Использование DTO для создания сущности блога
56:00 Использование возможностей PHP 8.2 для объявления public свойств DTO readonly
01:02:00 Зачем нужен свой Resolver в [MapRequestPayload] и как приблизительно его сделать
01:04:00 Покрываем новый контроллер функциональными Unit тестами
01:08:00 Использование в Unit тестами loginUser для выполнения запросов от авторизованного пользователя
01:11:00 Добавление дополнительных asserts с помощью пакета phpunit-json-assert
01:15:00 Пишем тесты на метод удаления и находим баг с потерянной миграцией таблицы comments. Исправляем пропущенную миграцию.
01:16:00 Еще раз прогововариваем, что сделали сегодня
#php #symfony #restapi #json #обучение #программирование #обучающие
Если у вас остались какие-либо вопросы, вы всегда можете спросить меня здесь, в комментариях. Также если вы нашли баг или знаете как что-то реализовать можно лучше, вы можете добавить эту информацию в комментариях 😀
Огромное вам спасибо!
спасибо 😇
Блин, как здорово!
Спасибо за плейлист, бегло посмотрел пару видео и кажется это то что надо чтобы с Symfony разобраться. Впитываю как губка все что в видео, после Laravel нужно быстро на Symfony перестроиться)
Круто было бы ссылку на репозиторий прикрепить) С состоянием проекта как видео начинается
Вот мне например сейчас конкретно API в Symfony нужно и есть выходные чтобы разобраться. Я взял бы репозиторий, включил бы видео и все руками за автором повторил, осмысляя все что вещается. А сейчас просто внимательно смотрю
Я вас помню в одном из учебных платформ вы были моим куратором)
Было да, работал в Скиллбокс в свое время
Ваши видео это каждый раз положительные эмоции, и охота учить. Спасибо.
Круто, пока смотрю этот плейлист, новое видео появилось, оказывается. Спасибо 😊
Видео очень интересное кстати. Сделано с душой и с высоты большого опыта!
Класс, мне как раз очень нужно было, спасибо вам и крепкого здоровья 🫡🫡🫡
Благодарю. Видео очень кстати. 🤲🏼много много благ вам.
Интересно посмотреть рабочую схему работы авторизации через JWT в таком же формате. Ибо очень много усложнений или хитрых обучалок, которые сильнее путают чем помогают. А авторизация все-таки важная часть приложения, хорошо бы понимать как она устроена и вытекающая из этого схема ролей(RBAC) Чаще всего на этом проект и начинает "пахнуть", имхо.
Даа возможно сделаю видео по JWT, по ролям да - обычно в середине пути забывают кто за что отвечал и начинается лапша, тяжело грамонтно наверное организовать саму структуру на бумаге нежели сделать это в коде.
Как трудно это все запоминать и не запутаться что кому передаётся.
это нормально, все невозможно запомнить, обычно в документацию все равно надо смотреть)
Как лучше создать api просто на symfony ? Или например использовать симфоневский api platform ?
Это сложный вопрос и на него нет однозначного ответа, плюс вкусовщина, тк зависит от проекта или компании, если проект долгосрочный то нужно думать о том, чтобы завтра API platform не перестали разрабатывать по каким-либо причинам, тк придется в итоге искать альтернативу, далее например вопрос привлечения новых разработчиков в проект, разработчика знающего Symfony будет найти проще, чем разработчика, знающего API Platform. В конечном счете Symfony идет в туже сторону и возможно они выкатят завтра то, что сделает смысл использования API Platform минимальным итд.
24:18 Кажется, что указание атрибутов наподобие `#[Groups(['groupOne'])]` над свойствами ведет к "засорению" класса сущности? Может быть есть способ этого избежать?
@@niknt атрибут является теперь элементом языка программирования php, поэтому по идее норм, если мне не изменяет память то это можно также описать в xml формате в отдельном xml файле, но мне кажется это неудобным, посмотрите в документации доктрины или симфони, вроде можно было описать их в xml
Миша, а чего симфони а не лара?
Я изначально знал Symfony до Laravel, после Symfony Laravel кажется уже чем-то другим) Хотя Laravel в итоге я думаю засчет простоты выиграл гонку и теперь более используемый, я думаю если начинающий то Laravel будет отличный выбор для входа, а после можно посмотреть как это реализовано в Symfony
@@bukachuk_php а мне совсем не зашел laravel, когда только начинал знакомиться с обоими фреймворками. Symfony кажется прозрачнее и более складной, правильной. И отлично, что делаешь видео именно по ней.
JSON это далеко не "ключ - значение")
Это образно))