Открыть сервис

API Platform

API Platform — это фреймворк с открытым исходным кодом для создания веб-API (интерфейсов программирования приложений), управления ими и их документирования. Он построен на основе языка PHP и экосистемы Symfony, предоставляя инструменты для автоматической генерации RESTful и GraphQL API, а также для создания связанных веб-интерфейсов (административных панелей). API Platform ориентирован на ускорение разработки «бэкенда» (серверной части) приложений, следуя принципам «конфигурации по соглашению» (convention over configuration) и «сначала дизайн» (design-first).

История и развитие

Проект был основан Кевином Дюнжаном (Kévin Dunglas) и впервые опубликован в 2015 году. Первоначально он представлял собой набор инструментов для Symfony, упрощающих создание API. В 2016 году вышла версия 2.0, которая стала полноценным фреймворком, интегрированным с Doctrine ORM (Object-Relational Mapping) и поддерживающим стандарты JSON-LD (JSON for Linking Data) и Hydra Core Vocabulary.

В 2020 году была выпущена версия 2.6, добавившая поддержку Mercure — протокола для обновлений в реальном времени. В 2023 году вышла версия 3.0, которая стала значительным обновлением: была переработана система фильтров, улучшена поддержка GraphQL, введена новая система сериализации на основе Symfony Serializer, а также добавлена возможность создания «API Resource» (ресурсов API) с помощью атрибутов PHP 8. Проект развивается при поддержке сообщества и компании Les-Tilleuls.coop, которая предоставляет коммерческую поддержку и обучение.

Архитектура и ключевые компоненты

API Platform построен на модульной архитектуре, где каждый компонент отвечает за определённую функциональность.

Ядро (Core)

Основной компонент, отвечающий за маршрутизацию, сериализацию, десериализацию и обработку запросов. Он определяет, как ресурсы API (сущности) преобразуются в JSON, XML или другие форматы.

Doctrine ORM Integration

Интеграция с Doctrine ORM позволяет автоматически генерировать CRUD-операции (Create, Read, Update, Delete) для сущностей базы данных. Разработчику достаточно описать сущность с помощью атрибутов или аннотаций, и API Platform создаёт соответствующие эндпоинты (конечные точки API).

API Platform Admin

Компонент для автоматической генерации административной панели на основе React. Он использует Hydra для получения метаданных API и создаёт интерфейс для управления данными без написания кода.

Mercure Integration

Интеграция с протоколом Mercure позволяет отправлять обновления в реальном времени (например, при изменении данных) через Server-Sent Events (SSE). Это полезно для чатов, уведомлений и других приложений, требующих мгновенной синхронизации.

GraphQL

API Platform поддерживает GraphQL наряду с REST. Для каждого ресурса автоматически генерируются запросы (queries) и мутации (mutations), что позволяет клиентам запрашивать только необходимые данные.

Основные возможности

Автоматическая генерация API

Одна из ключевых особенностей — автоматическое создание эндпоинтов на основе аннотаций или атрибутов PHP. Например, для сущности Product с атрибутом #[ApiResource] API Platform создаст эндпоинты:

  • GET /api/productsсписок продуктов;
  • POST /api/products — создание продукта;
  • GET /api/products/{id} — получение конкретного продукта;
  • PUT /api/products/{id} — обновление продукта;
  • DELETE /api/products/{id}удаление продукта.

Документирование (OpenAPI/Swagger)

API Platform автоматически генерирует документацию в формате OpenAPI (ранее Swagger). Это позволяет разработчикам клиентских приложений легко понимать структуру API, тестировать эндпоинты и генерировать клиентский код. Документация доступна по адресу /api/docs (по умолчанию).

Фильтрация и сортировка

Фреймворк предоставляет встроенные фильтры для поиска и сортировки данных:

  • Фильтр по свойству (SearchFilter) — поиск по точному совпадению, частичному совпадению, началу строки и т.д.;
  • Фильтр по диапазону (RangeFilter) — поиск по диапазону чисел или дат;
  • Фильтр по дате (DateFilter) — фильтрация по дате;
  • Сортировка (OrderFilter) — сортировка по одному или нескольким полям.

Валидация

API Platform использует компонент Symfony Validator для проверки входных данных. Разработчик может задавать правила валидации с помощью атрибутов (например, #[NotBlank], #[Length], #[Email]). Ошибки валидации возвращаются в стандартизированном формате.

Безопасность

Фреймворк интегрируется с Symfony Security для управления аутентификацией и авторизацией. Поддерживаются:

  • JWT (JSON Web Tokens) — для аутентификации без сохранения состояния;
  • OAuth2 — через сторонние библиотеки (например, LexikJWTAuthenticationBundle);
  • Ролевая модель — доступ к эндпоинтам можно ограничить на основе ролей пользователя (например, ROLE_ADMIN).

Расширяемость

API Platform позволяет добавлять собственные:

  • Провайдеры данных — для получения данных из нестандартных источников (например, внешние API, файлы);
  • Процессоры — для обработки данных перед сохранением;
  • Фильтры — для реализации специфической логики поиска;
  • События — для интеграции с жизненным циклом запроса (например, перед созданием, после обновления).

Пример использования

Типичный пример создания простого API для управления книгами на PHP с использованием API Platform:

```php // src/Entity/Book.php namespace App\Entity;

use ApiPlatform\Metadata\ApiResource; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert;

[ORM\Entity]

[ApiResource]

class Book {

[ORM\Id, ORM\GeneratedValue, ORM\Column]

private ?int $id = null;

[ORM\Column]

[Assert\NotBlank]

private ?string $title = null;

[ORM\Column]

[Assert\NotBlank]

private ?string $author = null;

[ORM\Column(type: 'integer')]

[Assert\Positive]

private ?int $year = null;

// Геттеры и сеттеры... } ```

После настройки маршрутизации и базы данных, API Platform автоматически создаст эндпоинты для управления книгами. Документация будет доступна по адресу /api/docs.

Критика и ограничения

Несмотря на широкие возможности, API Platform имеет ряд недостатков:

  • Сложность настройки — для новичков может быть сложным из-за глубокой интеграции с Symfony, который сам по себе требует изучения;
  • Производительность — автоматическая генерация и сериализация могут быть медленнее, чем ручная реализация, особенно при большом количестве данных;
  • Зависимость от Doctrine — хотя фреймворк поддерживает другие источники данных, основная интеграция заточена под Doctrine ORM, что может быть ограничением для проектов с нестандартными хранилищами;
  • Версионность — обновления между мажорными версиями (например, с 2.x на 3.x) могут требовать значительных изменений в коде.

Применение

API Platform используется в различных проектах, от небольших стартапов до крупных корпоративных систем. Он популярен в среде разработчиков на PHP, особенно в сочетании с Symfony. Примеры известных проектов, использующих API Platform, включают:

  • Les-Tilleuls.coop — внутренние системы компании-разработчика;
  • Sylius — платформа электронной коммерции, использующая API Platform для своего API;
  • Akeneo — система управления продуктами (PIM), частично использующая API Platform.

Источники

  1. Официальная документация API Platform (api-platform.com/docs).
  2. Репозиторий проекта на GitHub (github.com/api-platform/core).
  3. Книга «API Platform: Creating RESTful APIs with Symfony» (2020) — Кевин Дюнжан.
  4. Статья «API Platform 3.0: What's New» на сайте Symfony (symfony.com/blog).
  5. Документация Symfony (symfony.com/doc).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →