Im letzten Beitrag dieser Serie wurden Daten in Form eines assoziativen Array’s aus einem HTML-Dokument extrahiert. Nun werden diese verwendet, um daraus PHP-Klassen zu generieren, welche die Informationen aus einer API-Dokumentation reflektieren. So kann ein einfacher PHP API-Client generiert werden.

Wieso generieren? (Und wieso nicht?)

Code zu generieren ist mittlerweile auch in PHP eine sehr beliebte Praktik. Einer der grossen Vorreiter in Sachen Generatoren ist meiner Meinung nach das Symfony2 HTTP Framework. Ein Generator wird oft mit der Ersparnis von Aufwand bzw. Implementierungsarbeit gleichgesetzt, was jedoch so nicht immer korrekt ist.

Generatoren kommen da zum Einsatz, wo sich bestimmte Implementierungs- oder Integrationsprozesse kontinuierlich wiederholen. Das kann bspw. das ‘Aufwärmen’ von Caches, die Verarbeitung von Markup-Formaten wie YAML, oder die Aktualisierung von externen Schnittstellen sein.

Generierung ist in sehr vielen Bereichen möglich, jedoch nicht immer sinnvoll. Wir wissen ja, dass ein Generator immer von einer Datenquelle ausgeht, welche sich strukturell nicht ändern darf. Ist Letzteres der Fall, kann der Wartungsaufwand nahezu ins Unermessliche steigen. Zudem können Fehlerwirkungen auftreten, welche nur sehr mühsam zu debuggen sind.

Template-Engine vs. XSLT

Um aus einem Dokument Quellcode zu generieren, gibt es viele verschiedene Möglichkeiten. Beispielsweise kann man einen XSLT-Prozessor zur Hand nehmen, um direkt aus dem HTML Markup PHP Code zu generieren. Da sich die beiden Formate aber syntaktisch sehr stark unterscheiden und hier bereits ein assoziatives Array mit Rohdaten zur Verfügung steht, kann in diesem Fall die Template-Engine Twig zur Generierung verwendet werden.

Zunächst benötigt man etwas PHP Code und ein Array mit den Rohdaten. Dann instanziiert man eine Twig Engine, welche die Templates parsen kann.

Zunächst benötigt man etwas PHP Code und ein Array mit den Rohdaten. Dann instanziiert man eine Twig Engine, welche die Templates parsen kann.

Templates

Der aufmerksame Beobachter hat bemerkt, dass im Codebeispiel oben zwei Twig Templates verwendet werden, die zunächst nicht implementiert sind. Twig Templates sind recht einfach zu verstehen und gut dokumentiert, weshalb ich ohne weitere Erklärungen direkt die Beispiele zeigen möchte.

Mit Hilfe dieser Implementierung und den Templates ist es nun möglich, Code anhand beliebiger Daten zu generieren, auch über Programmiersprachgrenzen hinaus. Vielleicht möchte ja jemand den Client in JavaScript oder Perl generieren?

Im nächsten Beitrag der Serie wird gezeigt, wie ein einfaches Logging für Generator und Client umgesetzt werden kann und wie die Implementierung ‘in the wild’ aussieht.

Haben Sie Fragen oder Feedback? Verfassen Sie einen Kommentar oder twittern Sie an @frank_neff

(This blog post is also available in English)

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *