Die Geschichte der GraphQL API für OXID eShop
Wie GraphQL seinen Weg in OXID eShop findet
Als ich Mitte September 2019 meine Reise mit OXID eSales begann, war es meine Aufgabe, eine GraphQL API für den OXID eShop zu entwickeln. Also habe ich mich umgesehen, was schon existiert:
- GraphQL-Base-Modul
- sehr wenige Leute im Haus, die daran gearbeitet haben
- ein Projekt von Professional Services, in dem genutzt wurde, was bereits vorhanden war
Es war zeitaufwendig, mit allen zu sprechen, die am Aufbau des OXID GraphQL-Base-Moduls beteiligt waren, es in einem Projekt verwendet haben und zu prüfen, was Stand der Technik bei der Erstellung einer GraphQL API mit PHP ist. Aber am Ende entschieden wir uns, das GraphQL-Base-Modul zu überarbeiten, um die Entwicklererfahrung zu verbessern und modernste Werkzeuge zu verwenden.
Um das Team an Bord zu holen und die Arbeit an der GraphQL API in Gang zu bringen, beschlossen wir, uns persönlich dort zu treffen, wo die meisten von uns arbeiten, und das ist Plovdiv, Bulgarien. Da das Remote-Team im Jahr 2019 immens gewachsen war und sich einige Entwickler noch nicht persönlich getroffen hatten, war es nicht nur für mich toll, all die tollen Leute im Team zum ersten Mal zu treffen.
Alle, die Sie in diesem Video sehen, sind an der Entwicklung der GraphQL-Module für OXID eShop beteiligt:
GraphQL Base Modul
Wir haben beschlossen, unsere Arbeit auf GraphQLite aufzusetzen. Es handelt sich dabei um eine PHP-Bibliothek, die es uns erlaubt, GraphQL-Abfragen in einfach zu schreibenden Controllern zu erstellen. Es müssen lediglich PHP-Doc Annotations verwendet werden und schon erstellt GraphQLite auf magische Weise eine GraphQL-API. Zauberhaft!
Das erlaubt uns, schnell zu arbeiten und modernste Werkzeuge einzusetzen, z.B. statische Code-Analyse mit PHPStan. GraphQLite selbst basiert auf webonyx/graphql-php, der De-facto-Standard-PHP-Implementierung der GraphQL-Spezifikation.
Alles in allem haben wir das GraphQL-Base-Modul für OXID eShop vorbereitet, um ein paar Dinge zu erledigen:
- Es bringt GraphQLite v3 und bootstrapped es.
- Es bringt die erste Abfrage - eine Token-Abfrage, um Ihnen ein JWT zur Autorisierung zur Verfügung zu stellen.
- Es gibt Ihnen die Grundlage für die einfache Erweiterung und Erstellung Ihrer Abfragen, Mutationen und Typen für Ihre Module.
- Es hilft Ihnen beim Schreiben von Integrationstests durch die Bereitstellung eines abstrakten Testfalls.
GraphQL Beispielmodul
Das GraphQL-Beispielmodul dient nur einem Zweck: Es liefert Ihnen ein Beispiel, wie Sie Ihre eigenen Abfragen, Mutationen und Datentypen erstellen können. Wir werden es verwerfen - weshalb, werden Sie später verstehen ;-)
GraphQL-Modul-Skelett
Der Zweck des Modul-Skeletts ist es, Ihnen einen Ausgangspunkt zu bieten, wenn Sie Ihre eigene GraphQL-API erstellen oder die vorhandene erweitern möchten. Im Grunde genommen ist alles, was Sie brauchen, um anzufangen:
$ composer create-project oxid-esales/graphql-modul-skeleton
GraphQL Katalog-Modul
Hiermit verbringt das Remote-Team die meiste Zeit. Wenn Sie den OXID eSales Namespace auf GitHub verfolgt haben, gibt es nichts, was Sie überraschen sollte, dennoch kommen hier die Neuigkeiten.
Dieses Modul bringt Abfragen und Datentypen, die Sie benötigen, um ein Frontend zu erstellen, indem Sie nur die GraphQL-API verwenden, von der Startseite über Kategorien und Hersteller bis hin zu Produktdetailseiten und Rezensionen. Bis jetzt wurde dies in einem privaten Repository auf GitHub entwickelt, aber ab heute:
- ist dieses Repository öffentlich und
- lizenziert unter den Bedingungen der GNU General Public License v3.0
Das macht auch verständlich, warum wir das Beispielmodul einstellen, es gibt kein besseres Beispiel als die Implementierung selbst.
Also nur zu, schauen Sie sich das Modul auf GitHub an und fühlen Sie sich frei, Fragen zu stellen und etwas beizutragen!
Next up...
Unsere derzeitigen Pläne für GraphQL sind
- die erste Version des GraphQL-Katalog-Modul zu taggen, sobald die gesamte Funktionalität zum Aufbau der Katalogansicht mit der GraphQL-API zur Verfügung steht
- ein Kontomodul zu erstellen, das den Frontend-Benutzer in allem unterstützt, was er tun kann (abgesehen vom Checkout)
- ein Checkout-Modul bauen, das den kompletten Checkout über GraphQL abbildet
- ein Verwaltungsmodul zu erstellen, um jeden Aspekt des OXID eShop über die GraphQL-API steuern zu können