Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 487новых вакансий за сутки·92 551вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 220
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

DevOps и инфраструктура

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

Аналитика и данные

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

Другие направления

  • Проджект-менеджер611
  • UI/UX дизайн145
  • Ручное тестирование14

По регионам

  • Вакансии в США43 685
  • Вакансии в Европе23 684
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 887
  • Релокация в США43 685
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме SymfonyВсе вопросы
SymfonyMiddleКодинг

Как реализовать API Platform в проекте Symfony?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

API Platform превращает PHP-класс с атрибутом #[ApiResource] в полноценный REST/GraphQL API: маршруты, сериализацию, валидацию и OpenAPI-документацию фреймворк генерирует автоматически.

Минимальная настройка

Установка через Composer (внутри контейнера):

composer require api

Сущность с атрибутом #[ApiResource]:

<?php
// src/Entity/Product.php
namespace App\Entity;

use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Post;
use ApiPlatform\Metadata\Put;
use ApiPlatform\Metadata\Delete;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

#[ApiResource(
    operations: [
        new GetCollection(),
        new Get(),
        new Post(),
        new Put(),
        new Delete(),
    ]
)]
#[ORM\Entity]
class Product
{
    #[ORM\Id, ORM\GeneratedValue, ORM\Column]
    private ?int $id = null;

    #[ORM\Column(length: 255)]
    #[Assert\NotBlank]
    #[Assert\Length(max: 255)]
    public string $name = '';

    #[ORM\Column]
    #[Assert\PositiveOrZero]
    public float $price = 0.0;

    public function getId(): ?int { return $this->id; }
}

После миграции (bin/console doctrine:migrations:migrate) сразу доступны все шесть эндпоинтов, а по адресу /api открывается Swagger UI.

Что делает API Platform

API Platform — это слой поверх Symfony, который берёт Doctrine-сущность (или любой PHP-класс) и автоматически генерирует для неё набор HTTP-операций: GET /products, GET /products/{id}, POST /products, PUT, PATCH, DELETE. Маршруты, сериализация через Symfony Serializer, валидация через Validator и OpenAPI-документ появляются без написания контроллеров вручную.

Кастомная операция с StateProcessor

Когда стандартной персистентности через Doctrine недостаточно — например, нужно отправить email после создания заказа — подключают кастомный процессор:

<?php
// src/State/OrderProcessor.php
namespace App\State;

use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProcessorInterface;
use App\Entity\Order;
use App\Service\Mailer;

final class OrderProcessor implements ProcessorInterface
{
    public function __construct(
        private ProcessorInterface $persistProcessor, // декорируем стандартный
        private Mailer $mailer,
    ) {}

    public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): Order
    {
        /** @var Order $order */
        $order = $this->persistProcessor->process($data, $operation, $uriVariables, $context);
        $this->mailer->sendOrderConfirmation($order);
        return $order;
    }
}
#[ApiResource(
    operations: [
        new Post(processor: OrderProcessor::class),
    ]
)]
class Order { /* ... */ }

Фильтрация и пагинация

use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Doctrine\Orm\Filter\RangeFilter;
use ApiPlatform\Metadata\ApiFilter;

#[ApiResource]
#[ApiFilter(SearchFilter::class, properties: ['name' => 'partial'])]
#[ApiFilter(RangeFilter::class, properties: ['price'])]
class Product { /* ... */ }

Теперь работают запросы вида GET /products?name=phone&price[gte]=100. Пагинация включена по умолчанию (30 элементов на страницу), настраивается в config/packages/api_platform.yaml.

Подводные камни

  • Circular reference при сериализации. Если сущности ссылаются друг на друга (Order → User → Order), Serializer уходит в бесконечную рекурсию. Решение — группы сериализации (#[Groups(['order:read'])]) на каждом свойстве.
  • N+1 запросы в коллекциях. По умолчанию Doctrine подгружает связанные сущности по одной. Нужен fetch: EAGER или кастомный StateProvider с JOIN FETCH.
  • Конфликт маршрутов с обычными контроллерами. API Platform регистрирует маршруты с префиксом /api; если у вас уже есть контроллер на этом пути, возникнет конфликт. Проверяйте через bin/console debug:router.
  • Валидация срабатывает до процессора. Symfony Validator запускается автоматически перед process(). Если добавить кастомный Constraint, который делает запрос в БД, он выполнится на каждый POST — учитывайте производительность.
  • Версионирование API. API Platform не поддерживает версионирование «из коробки». Придётся либо использовать разные префиксы (/api/v1, /api/v2), либо content negotiation через custom operation.
  • GraphQL и Mercure требуют отдельных пакетов. composer require webonyx/graphql-php и composer require mercure — без них соответствующие разделы документации не работают, хотя атрибут #[ApiResource] уже создаёт ощущение поддержки.

Частые вопросы на собеседовании

  • Как Symfony обрабатывает защиту от CSRF?
  • Как устроен Dependency Injection container compile pass?
  • Как работает service container (контейнер dependency injection) в Symfony?
  • В каких backend-проектах Symfony является сильным выбором, а где лучше выбрать более простой или другой стек?

Типичные ошибки

  • Сводить api platform к названию метода без lifecycle и failure path.
  • Игнорировать модель runtime: Symfony 7/8 строит request lifecycle вокруг HttpKernel, events, routing, controller resolver и response listeners.
  • Не отделять validation, authorization, transaction boundary и business logic.

Что проверяет интервьюер

  • Объясняет api platform через конкретную точку lifecycle в Symfony.
  • Приводит корректный минимальный пример без вымышленных методов или callbacks.
  • Называет edge cases: пустые значения, ошибки, транзакции, безопасность или concurrency.

Как вы знаете этот вопрос?

Проверить себя по теме Symfony →

Источники

  • https://api-platform.com/docs/core/
  • https://symfony.com/doc/current/index.html

Связанные темы

SymfonyBackend-Engineeringdatabase-modelingsymfony-ecosystemtransaction-design