Minulost
V roce 2020 potřeboval produktový tým Bauhaus propojit dvě námi spravované a kontinuálně vyvíjené backendové instance platformy Pimcore – používané primárně pro Product Information Management (PIM) – s frontendovými Magento e-commerce řešeními pod správou našich kolegů z firmy Vaimo.
Headless řešení dávalo všem stranám největší smysl. Dalším krokem tak byla integrace backendu s frontendem. Řešení se nabídlo samo – Pimcore-Magento Connector, open-source balíček o dvou částech (jedna pro Pimcore, druhá pro Magento) schopný přenášet produktová data, včetně parametrů classification store, plně kompatibilní s PHP 7 a Pimcore 6.
Integrace v Pimcore proběhla hladce, během staging testování ale vyšlo najevo, že bude potřeba několik úprav. Například uchování informace o pojmenovaných skupinách atributů. Ty jsme vyřešili pomocí automatického patchování během composer install / update (composer-patches), udržovat fork vzhledem k malému rozsahu změn nedávalo úplně smysl.
Současnost
Roky plynuly a vývoj Connectoru zpomaloval, provoz odhaloval různé nedostatky a problémy, které maintainer sliboval vyřešit v plánované verzi 2.0. Ta se však zdála být v nedohlednu. Nakonec jsme se dostali do situace, kdy nám Connector zablokoval možnost aktualizovat jak Pimcore z verze 6 na verzi 10 (a nyní 11), tak samotné PHP na verzi 8.
Maintainer tiše opustil Connector a na nás tak bylo projekt převzít. Měli jsme dvě možné cesty:
- Pokračovat ve vývoji verze 2.0 tam, kde původní maintainer skončil.
- Naprogramovat novou, vlastní verzi Pimcore části Connectoru, se zachováním existujících schémat komunikace.
Z předimplementační analýzy a odhadu nám nakonec vyplynulo, že druhá cesta dává větší smysl. Proč?
- Není potřeba studovat původní záměr a workflow.
- Měli jsme volné ruce při návrhu architektury, možností konfigurace a budoucím vývoji.
- Dostali jsme možnost využít „best practice“ technologii (například Symfony Messenger pro asynchronní zpracování zpráv).
- Díky zachování schémat původních požadavků a odpovědí můžeme nový Connector použít jako drop-in replacement a na Magento straně není nutné nic dělat.
Connector 2.0
Komunitní edice Pimcore od verze 10.6 neobsahuje REST API Webservice (služba je dostupná v LTS Enterprise edici). Tuto službu Connector používá pro získávání dat, proto jsme museli za pomocí standardních Symfony Controllerů naprogramovat fasádu, která REST API Webservice napodobuje.
Nový connector jsme programovali jako lokální Symfony Bundle – stačí composer.json, dodržení požadované struktury modulu a přidání dependency injection tříd, které aplikaci řeknou, že má bundle načíst. Po otestování je možné bundle buď publikovat, nebo alespoň napojit přes GitHub repozitář.
Prioritou bylo zachování podoby všech požadavků a odpovědí. Vybrali jsme vzorek dat, který pokrývá všechna požadovaná produktová data, a použili Postman – pro všechny požadavky a odpovědi, které Connector odesílá a přijímá, jsme vytvořili vzorovou kolekci a mock server. Ten nám umožnil průběžně komunikaci kontrolovat a postupně nahradit všechny potřebné endpointy.
JSON pro všechny!
Odstranění Pimcore REST API z komunitní edice představovalo další problém – potřebovali jsme marshaller (komponentu, která z PHP objektů vytvoří jejich textovou reprezentaci, v našem případě JSON).
Vydali jsme se cestou strategií a (téměř) každý typ Pimcore pole objektů dostal svou vlastní. Například pole obsahující skalární hodnoty – text, číslo, bool – zvládne zpracovat jediná strategie, můžeme tak implementovat strategie pro typy polí, s nimiž původní connector neuměl pracovat. A dosud jsme se nesetkali s tím, že by nás strategie zklamaly.
Výhody jsou zřejmé:
- Snadná testovatelnost
- Jednoduchá rozšiřitelnost
- Přizpůsobitelnost
- Zjednodušení oproti architektuře původního connectoru
„Mnoho našich klientů má z vlastního vývoje přirozeně obavy, nicméně se nám opět potvrdilo, že se jedná o dlouhodobě nejudržitelnější řešení,“ doplňuje Lukáš Cafourek, zakladatel PORTY.
Ověřili jsme si tedy, že jít cestou vlastního řešení byla dobrá volba.
Budoucnost
K dnešnímu datu (červenec 2024) jsme ve fázi implementace na staging server, kde nám s testováním pomůžou naši kolegové z firmy Vaimo.
Bauhaus tým už pomalu zvažuje vývoj dalších funkcí connectoru, například přenos metadat assetů, kde bude potřeba upravit i druhou stranu connectoru, aby si s novými daty Magento poradilo.
„A komu tím prospějete?“
Potvrdili jsme si, že se vyplatilo nezaleknout se a vydat se neprošlapanou cestou vlastního vývoje. Naprogramovali jsme vlastní řešení propojení Pimcore a Magento Connectoru, navzdory tomu, že oficiální autority upustily od aktualizací a podpory. I když to na začátku vypadalo, že to nepůjde, nakonec byl opak pravdou.