Czy warto korzystać z API Platform?
Czy naprawdę da się stworzyć dobre API w ciągu kilku dni? Twórcy API Platform przekonują, że tak. To obietnica idealna w świecie, w którym czas i budżet mają kluczowe znaczenie. Warto przyjrzeć się temu narzędziu z bliska – sprawdźmy, co oferuje, gdzie radzi sobie najlepiej i w jakich sytuacjach może nie spełnić oczekiwań.
API Platform – czym jest?
API Platform – czym jest?
API Platform to framework do budowy nowoczesnych API w PHP, który automatyzuje tworzenie interfejsów RESTful i GraphQL. Powstał w 2015 roku z inicjatywy Kevina Dunglassa, eksperta od Symfony. Jego zadaniem było ułatwienie życia developerom, którzy sporo czasu w projektach poświęcali właśnie na pisanie interfejsów programowania. A to o tyle ważne, że obecnie aż 82% projektów przynajmniej częściowo bazuje na podejściu API-first. Wiemy to z raportu State of the API przygotowanego przez Postman w 2025 roku.
Framework w dużej mierze rozwiązuje ten problem. API Platform działa jako warstwa abstrakcji nad Symfony, która sprowadza budowę API do kilku prostych kroków. Wystarczy zdefiniować modele danych jako klasy PHP i dodać atrybuty. Następnie framework wygeneruje cały interfejs z operacjami CRUD, walidacją danych, systemem autoryzacji, paginacją, filtrowaniem, wsparciem dla formatów JSON-LD, Hydra oraz HAL, a nawet… gotową dokumentacją.
API Platform sprawdza się i w klasycznych aplikacjach monolitycznych (na przykład projektach single-page apps), i w systemach typu headless. Zapewnia też konfigurację pod Dockera oraz Kubernetes, co ułatwi deployment aplikacji w praktycznie każdym środowisku.
API Platform – najważniejsze cechy
API Platform – najważniejsze cechy
Przed wykorzystaniem API Platform warto poznać charakterystykę frameworka. Poniżej najistotniejsze z nich.
Świetne podstawy
Cały framework opiera się na PHP 8.2+ i Symfony 7, czyli naprawdę solidnych fundamentach, biorąc pod uwagę stopień rozbudowania tego ekosystemu. Z kolei do zarządzania bazą danych korzysta z Doctrine ORM – kolejnej popularnej i mocno wspieranej biblioteki PHP, która ułatwia zarządzanie relacjami między encjami, upraszcza migracje schematów, a nawet dodaje lazy loading do obsługi zapytań do bazy.
Sama architektura frameworka zmieniała się przez lata. Prawdpodobnie najważniejszą zmianą, która znacznie ułatwiła pracę developerom, było przejście na natywne atrybuty PHP wraz z pojawieniem się wersji 8.0 tego języka. W starszych wersjach platformy trzeba było definiować konfigurację API albo w osobnych plikach YAML, albo w komentarzach DocBlock. Problem w tym, że wszystkie IDE traktowały te konfiguracje jak zwykły tekst. Atrybuty PHP widzą je już jako kod, więc mogą np. wykrywać w nich błędy składniowe.
Tak mogłaby wyglądać bardzo prosta implementacja API w najnowszej wersji API Platform:
namespace App\Entity; use ApiPlatform\Metadata\ApiResource; use ApiPlatform\Metadata\Get; use ApiPlatform\Metadata\GetCollection; use ApiPlatform\Metadata\Post; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ApiResource( operations: [ new GetCollection(), new Post(), new Get(), ] )] class Book { #[ORM\Id, ORM\Column, ORM\GeneratedValue] private ?int $id = null; #[ORM\Column] public ?string $title = null;I to w zasadzie wszystko – jeden plik wystarczy, aby API Platform automatycznie wygenerowało gotowy do użycia interfejs.
Wsparcie dla GraphQL i REST jednocześnie
Jedną z bardziej praktycznych zalet API Platform jest fakt, że nie musisz wybierać, czy stworzysz API w REST, czy w GraphQL – framework przygotuje oba interfejsy na podstawie tych samych encji PHP. Co prawda domyślnie robi to w REST, ale aby włączyć też GraphQL, wystarczy zainstalować jeden pakiet:
composer require api-platform/graphqlCała logika API – filtry, zasady walidacji i autoryzacji zapytań – zadziała dokładnie tak samo w obu wersjach interfejsu.
Gotowe generatory dla React, Vue i Next.js
To nie wszystko, bo framework zapewnia też narzędzie – Create Client – do generowania prostych skryptów frontendowych pod Reacta, Next.js oraz Vue.
Po zdefiniowaniu zasobów API generator analizuje jego strukturę i tworzy komponenty UI w TypeScript’cie, które da się później dowolnie zmodyfikować. Może to być np. formularz do edycji danych albo lista z paginacją. Dla projektów w React’cie i Next.js generator domyślnie korzysta z biblioteki React Admin, w przypadku Vue – z Nuxt.js.
Create Client ma dosyć ograniczone możliwości. Przygotuje tylko wybrane, niezbyt skomplikowane komponenty (o czym możesz przeczytać w oficjalnej dokumentacji API Platform), ale np. przy budowie prostego panelu administracyjnego jak najbardziej również może się przydać.
Aktualizacje w czasie rzeczywistym (Mercure)
API Platform ma także wbudowaną integrację z protokołem Mercure, który pozwala wymieniać informacje między bazą danych a przeglądarką w czasie rzeczywistym. Jeśli dane się zmienią, na ekranie użytkownika będzie to widoczne po kilku sekundach. To dobra alternatywa dla protokołu WebSocket, który działa podobnie, ale wymaga więcej pracy przy konfiguracji. Dodatkowo, Mercure działa wg standardu Server-Sent Events, który dziś obsługuje każda przeglądarka bez konieczności instalowania dodatkowych bibliotek.
Korzystne z punktu widzenia SEO
Tak jak wspominaliśmy na początku, framework natywnie wspiera format JSON-LD oraz standard Hydra. To szczególnie ważne w kontekście tego, jak Twoją stronę lub aplikację będą widziały algorytmy wyszukiwarek.
JSON-LD to format danych strukturalnych rekomendowany od dawna przez Google. Dzięki temu, że interfejs przygotowany w API Platform automatycznie zwraca dane właśnie w tym formacie, roboty wyszukiwarek są w stanie łatwo rozpoznać dany zasób: czy to produkt, artykuł, recenzja, czy np. wydarzenie. Na przykład odpowiedź API dla produktu mogłaby wyglądać tak:
{ "@context": "https://schema.org", "@type": "Product", "@id": "/api/products/123", "name": "Laptop Dell XPS 15", "description": "Wysokowydajny laptop z procesorem Intel i7", "price": { "@type": "Offer", "price": "5999.00", "priceCurrency": "PLN" }, "brand": { "@type": "Brand", "name": "Dell" } }Wszystkie informacje są oznaczone zgodnie z wytycznymi schema.org, więc algorytm wie od razu, jak interpretować strukturę danych. To z kolei zwiększa szanse, że strona pojawi się w wynikach wyszukiwania wraz z tzw. rich snippets.
Kiedy warto (a kiedy nie) korzystać z API Platform?
Kiedy warto (a kiedy nie) korzystać z API Platform?
Z naszego doświadczenia wiemy, że API Platform jest świetnym wyborem w projektach, które bazują na standardowych operacjach CRUD i wymagają wdrożenia funkcjonalnego API jak najszybciej. Obojętnie, czy budujesz aplikację headless, platformę e-commerce, własny system zarządzania treścią (CMS) czy aplikację SaaS – framework ten może naprawdę pomóc zaoszczędzić tygodnie pracy. A żeby lepiej zobrazować, dlaczego łatwiej budować interfejsy programowania z API Platform niż tylko „czystym” Symfony, poniżej znajdziesz krótką tabelę.
| Symfony | API Platform | |
|---|---|---|
| Tworzenie CRUD | Wymaga ręcznego pisania kontrolerów, serializerów, walidacji dla każdego endpointu. | Generuje CRUD automatycznie na podstawie encji, wystarczy dodać atrybut #[ApiResource]. |
| Dokumentacja API | Trzeba ręcznie skonfigurować NelmioApiDocBundle i opisać każdy endpoint, a potem aktualizować po każdej większej zmianie w kodzie. | Tworzy dokumentację automatycznie, według specyfikacji OpenAPI. |
| Paginacja/Filtry | Trzeba zaimplementować od zera, ręcznie. | Do dyspozycji mamy gotowe mechanizmy paginacji oraz filtry (np. #[ApiFilter(SearchFilter::class)]). |
| Próg wejścia | Średni, aby opanować podstawy samego Symfony. Developer, który dobrze zna jego środowisko, może od razu zabrać się za budowę API i ma pełną kontrolę nad każdym jego aspektem. | Na początku wyższy, bo trzeba dobrze poznać konwencje i sposób działania frameworka. Za to potem tworzenie API staje się dużo łatwiejsze. |
Czy są projekty, w których nie ma sensu korzystać z API Platform? Tak, jeśli ma służyć nie tyle do zarządzania zasobami przy pomocy CRUD, a wykonywania bardziej złożonych operacji biznesowych i przetwarzania danych. Świetnym przykładem byłby każdy system do przetwarzania płatności – choćby Stripe, który jest przecież „pakietem” kilku rozbudowanych API. Wtedy na pewno lepiej byłoby pracować od początku do końca na samym Symfony i własnych kontrolerach.
Ale większość projektów, w całości lub częściowo, da się uprościć z pomocą API Platform – bo nie ma przypadku w tym, że główny pakiet api-platform/core został pobrany z repozytorium Packagist… ponad 45 milionów razy.