Как сделать 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 #обучение #программирование #обучающие

КОМЕНТАРІ • 26

  • @bukachuk_php
    @bukachuk_php  2 місяці тому +1

    Если у вас остались какие-либо вопросы, вы всегда можете спросить меня здесь, в комментариях. Также если вы нашли баг или знаете как что-то реализовать можно лучше, вы можете добавить эту информацию в комментариях 😀

  • @hafizhadia4916
    @hafizhadia4916 8 днів тому +1

    Огромное вам спасибо!

  • @marpusik1277
    @marpusik1277 2 місяці тому +2

    спасибо 😇

  • @user-uf2ur4bw7m
    @user-uf2ur4bw7m 2 місяці тому +1

    Блин, как здорово!

  • @wsg2843
    @wsg2843 Місяць тому +1

    Спасибо за плейлист, бегло посмотрел пару видео и кажется это то что надо чтобы с Symfony разобраться. Впитываю как губка все что в видео, после Laravel нужно быстро на Symfony перестроиться)
    Круто было бы ссылку на репозиторий прикрепить) С состоянием проекта как видео начинается
    Вот мне например сейчас конкретно API в Symfony нужно и есть выходные чтобы разобраться. Я взял бы репозиторий, включил бы видео и все руками за автором повторил, осмысляя все что вещается. А сейчас просто внимательно смотрю

  • @mirosh1257
    @mirosh1257 Місяць тому +1

    Я вас помню в одном из учебных платформ вы были моим куратором)

    • @bukachuk_php
      @bukachuk_php  Місяць тому

      Было да, работал в Скиллбокс в свое время

  • @disconnect3763
    @disconnect3763 2 місяці тому +1

    Ваши видео это каждый раз положительные эмоции, и охота учить. Спасибо.

  • @locbkm1269
    @locbkm1269 Місяць тому +1

    Круто, пока смотрю этот плейлист, новое видео появилось, оказывается. Спасибо 😊

  • @groza-a-a
    @groza-a-a 2 місяці тому +1

    Видео очень интересное кстати. Сделано с душой и с высоты большого опыта!

  • @denysbarzynskyi2494
    @denysbarzynskyi2494 2 місяці тому +1

    Класс, мне как раз очень нужно было, спасибо вам и крепкого здоровья 🫡🫡🫡

  • @SaidaSherDaily
    @SaidaSherDaily 2 місяці тому +1

    Благодарю. Видео очень кстати. 🤲🏼много много благ вам.

  • @groza-a-a
    @groza-a-a 2 місяці тому +1

    Интересно посмотреть рабочую схему работы авторизации через JWT в таком же формате. Ибо очень много усложнений или хитрых обучалок, которые сильнее путают чем помогают. А авторизация все-таки важная часть приложения, хорошо бы понимать как она устроена и вытекающая из этого схема ролей(RBAC) Чаще всего на этом проект и начинает "пахнуть", имхо.

    • @bukachuk_php
      @bukachuk_php  2 місяці тому +1

      Даа возможно сделаю видео по JWT, по ролям да - обычно в середине пути забывают кто за что отвечал и начинается лапша, тяжело грамонтно наверное организовать саму структуру на бумаге нежели сделать это в коде.

  • @disconnect3763
    @disconnect3763 2 місяці тому +1

    Как трудно это все запоминать и не запутаться что кому передаётся.

    • @bukachuk_php
      @bukachuk_php  2 місяці тому +1

      это нормально, все невозможно запомнить, обычно в документацию все равно надо смотреть)

  • @user-hs6qm3ln8n
    @user-hs6qm3ln8n Місяць тому +2

    Как лучше создать api просто на symfony ? Или например использовать симфоневский api platform ?

    • @bukachuk_php
      @bukachuk_php  Місяць тому +1

      Это сложный вопрос и на него нет однозначного ответа, плюс вкусовщина, тк зависит от проекта или компании, если проект долгосрочный то нужно думать о том, чтобы завтра API platform не перестали разрабатывать по каким-либо причинам, тк придется в итоге искать альтернативу, далее например вопрос привлечения новых разработчиков в проект, разработчика знающего Symfony будет найти проще, чем разработчика, знающего API Platform. В конечном счете Symfony идет в туже сторону и возможно они выкатят завтра то, что сделает смысл использования API Platform минимальным итд.

  • @niknt
    @niknt 12 днів тому

    24:18 Кажется, что указание атрибутов наподобие `#[Groups(['groupOne'])]` над свойствами ведет к "засорению" класса сущности? Может быть есть способ этого избежать?

    • @bukachuk_php
      @bukachuk_php  12 днів тому +1

      @@niknt атрибут является теперь элементом языка программирования php, поэтому по идее норм, если мне не изменяет память то это можно также описать в xml формате в отдельном xml файле, но мне кажется это неудобным, посмотрите в документации доктрины или симфони, вроде можно было описать их в xml

  • @LOKI3st
    @LOKI3st Місяць тому +2

    Миша, а чего симфони а не лара?

    • @bukachuk_php
      @bukachuk_php  Місяць тому +2

      Я изначально знал Symfony до Laravel, после Symfony Laravel кажется уже чем-то другим) Хотя Laravel в итоге я думаю засчет простоты выиграл гонку и теперь более используемый, я думаю если начинающий то Laravel будет отличный выбор для входа, а после можно посмотреть как это реализовано в Symfony

    • @locbkm1269
      @locbkm1269 Місяць тому +1

      @@bukachuk_php а мне совсем не зашел laravel, когда только начинал знакомиться с обоими фреймворками. Symfony кажется прозрачнее и более складной, правильной. И отлично, что делаешь видео именно по ней.

  • @princessluna1069
    @princessluna1069 Місяць тому +1

    JSON это далеко не "ключ - значение")