API Platform

  • State Providers - адаптеры для пользовательских уровней сохраняемости, виртуальных полей, пользовательской гидратации
  • The Serialization/Deserialization Process - объекты постобработки, созданные на основе полезной нагрузки, отправленной в теле HTTP-запроса
  • Security - пользовательская логика авторизации
  • Validation - пользовательская логика проверки
  • State Processors - настраиваемая бизнес-логика и вычисления для запуска до или после сохранения (например, почта, вызов внешнего API …)
  • The Normalization/Denormalization Process - настройка ресурса, отправляемого клиенту (добавление полей в документы JSON, кодирование кодов, дат …)
  • Filters - создавайте фильтры для коллекций и автоматически документируйте их (OpenAPI, GraphQL, Hydra)
  • Serializer Context Builders - Динамическое изменение контекста сериализации (например, групп)
  • Messenger Handlers - создавайте 100% пользовательские, RPC, асинхронные, сервис-ориентированные конечные точки (следует использовать вместо пользовательских контроллеров, поскольку интеграция messenger совместима как с REST, так и с GraphQL, в то время как пользовательские контроллеры работают только с REST)
  • DTOs and Data - используйте определенный класс для представления структуры входных или выходных данных, связанных с операцией
  • Kernel Events - настройте HTTP-запрос или ответ (только REST, по возможности следует предпочесть другие точки расширения)
версии 2.6
<?php
// api/src/Entity/Book.php
namespace App\Entity;
 
use ApiPlatform\Core\Annotation\ApiResource;
 
#[ApiResource(
    iri: 'https://schema.org/Book',
    itemOperations: [
        'get',
        'post_publication' => [
            'method' => 'POST',
            'path' => '/books/{id}/publication',
        ],
    ])
]
class Book
{
    // ...
}
версии 2.7
<?php
// api/src/Entity/Book.php
namespace App\Entity;
 
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\Post;
use App\Controller\CreateBookPublication;
 
#[ApiResource(types: ['https://schema.org/Book'], operations: [
    new Get(),
    new Post(name: 'publication', uriTemplate: '/books/{id}/publication')
])]
class Book
{
    // ...
}

Symfony / API Platform