PHP API erstellen und C# Applikation anbinden
In diesem Artikel zeige ich wie man schnell und effektiv eine PHP API erstellt und eine moderne .NET Applikation daran anbindet. Ich erkläre auch warum ich diesen Ansatz wähle.
PHP API erstellen und C# Applikation anbinden
Für meine Anforderung hat sich die Kombination aus PHP am Server und C# bzw. .NET am Client als beste Option entpuppt. Warum? Zum einen sind die meisten Web Hoster immer noch PHP only unterwegs und zum anderen entwickelt man mit C# schnell und einfach Plattform übergreifende Apps.
Deshalb PHP
Für das zu entwickelnde Service benötige ich ein möglichst günstige Möglichkeit das Backend zu hosten. Die Betriebskosten pro Monat sollten so niedrig wie möglich sein. Da PHP immer noch die Basis der meisten dynamischen Websites (WordPress, Magento, …) sind bekommt man an jeder Ecke schon ab einem Euro im Monat einen Server mit der aktuellen PHP Version, etwas Speicher und eine MySQL Datenbank (oder den Open Source Fork Maria DB). Solange das Backend schlank genug ist und wenig Ressourcen benötigt ist das um Welten günstiger als ein .NET / C# Backend beispielsweise in der Azure Cloud. Einzige günstige Alternative wäre ein eigener virtueller Server, doch das ist zu viel administrativer Aufwand.
Deshalb .NET / C#
Beim Client wähle ich .NET und C#. Die Kombination hat den Grund, da ich damit seit Jahren professionell arbeite. Diese Entscheidung ist subjektiv. Alternativen gibt es genug, beispielsweise JavaScript / TypeScript, Java, oder andere Tech Stacks.
Wo startet man?
Ich baue ein kleines Daten getriebenes Client Server System. Dabei sind die Daten in der Datenbank der „single point of truth“. D.h. ich starte mit einer Struktur der Daten und setze diese in der Datenbank um. Danach schreibe ich in PHP alle Service Routinen die rund um die Uhr auf die Datenbank zugreifen und eventuell automatische Änderungen vornehmen. Als Methode wähle ich Test Driven Development (TDD), baue also auch gleich allerhand Unit Tests für die PHP Routinen. Damit ist das Backend fertig – meine Core! Dank hoher Testabdeckung kann der Core jederzeit sicher erweitert und angepasst werden.
Die Schnittstelle
Der Client soll die Datenbank nutzen, aber nicht direkt darauf zugreifen dürfen. Aus Sicherheitsgründen implementiere ich eine API Schicht, über die jeder User seine Daten abfragen und ändern kann. Diese wenigen API Endpunkte sind stark vereinfacht, durch ein Token System sehr sicher gegen ungerechtfertigte Zugriffe.
C# Applikation
Auf der C# Seite erstelle ich eine API Bibliothek in der alle Models der Datenbank und zusätzlich alle API Endpunkte implementiert werden. Will man beispielsweise die eigenen Userdaten abfragen reicht der Aufruf von getUser und als Ergebnis bekommt man ein Model mit den eigenen User Daten. Die komplette Kommunikation mit der API und alle erforderlichen Routinen wie das Login und erstellen von Tokens ist dort abstrahiert. Diese C# Bibliothek wird im Client verwendet.
C# Client
Im Client implementiere ich schlussendlich nur noch wenig Business Logik. Im Prinzip besteht der Code hauptsächlich aus den Anforderungen der Client Applikation. Ich verwende das neue MAUI Framework, d.h. 90% vom Code sind einzelne Pages, Buttons, Events. Ein wenig Business Logik dazwischen ruft die API Bibliothek auf und schickt Daten an das Backend, beziehungsweise holt Daten von dort zum Anzeigen in der App. Dank MAUI erstellt man so mit relativ wenig Aufwand eine Basis für eine Android und iOS App und gleichzeitig auch für eine native Windows App. Der meiste Aufwand fließt ins polishing der einzelnen Pages, also die Usability Optimierung. Ein wenig feilt man dann noch mit nativen Code für Android oder iOS nach.
Fazit
Mit der in dem Artikel vorgestellten Architektur erstellt man spielend leicht eine komplexe Client-Server Anwendung. Diese ist modular aufgebaut und die einzelnen Bausteine sind austauschbar. Tech Stacks der Bausteine sind nicht fix, man kann jederzeit auf Java wechseln oder doch mal JavaScript ausprobieren. Ein fertiges System erlaubt auch die Anbindung unterschiedlichster Clients die auf beliebigen Plattformen laufen.