© saicle/Shutterstock.com
appserver.io als RESTful Service für AngularJS-Apps

Der erste Ritt auf dem eisernen Pferd


Seit geraumer Zeit steht Version 1.0 aka Iron Horse der Enterprise-PHP-Infrastrukturlösung appserver.io zur Verfügung. Gerade für die Anforderungen heutiger Single-Page-Apps, die mit AngularJS oder auch Ember realisiert werden können, bietet der appserver.io ein ganzes Set von Services, welche einem die Arbeit vor allem in großen und performanceintensiven Applikationen erleichtern.

Fast alle Single-Page-Apps benötigen irgendwann eine Anbindung an Web Services, um Funktionalitäten wie z. B. Authentifizierung zu ermöglichen. Gerade auch aus dem Grund, dass SPAs zustandsorientiert „stateful“ sind und das bestenfalls auch von einem ernstzunehmenden Backend erwartet werden sollte, spricht alles dafür, einen RESTful Service auf Basis des appserver.io [1] zu realisieren.

Im Gegensatz zu zustandslosen Services können hier instanziierte Objekte persistent im Speicher gehalten und für die parallele Bearbeitung aller eingehenden Requests gemeinsam verwendet werden. Diese Vorgehensweise spart zum einen wertvolle Rechenzeit, optimiert die Ausnutzung der vorhandenen Serverinfrastruktur hinsichtlich CPU und Speichernutzung und verspricht neben dem Potenzial von Energiesparmöglichkeiten eine höhere Performance bei der Bearbeitung von Requests und somit geringeren Antwortzeiten bei Serviceanfragen.

Wir werden in diesem Artikel eine AngularJS-Anwendung erstellen, die durch den appserver.io selbst ausgeliefert wird. Diese wird dann um einen Authentifizierungsservice erweitert, der wiederum mit einem RESTful Service basierend auf dem appserver.io kommuniziert und Features wie Servlets, Dependency Injection, AOP und Annotated Validation nutzt, um immer wiederkehrende Probleme elegant zu lösen.

Voraussetzungen

Als Erstes laden wir uns den appserver.io für das entsprechende Betriebssystem in der aktuellsten Version unter [2] herunter. Eine Anleitung zur Installation findet man dort ebenfalls. Sofern alles korrekt installiert wurde, wird man unter http://127.0.0.1:9080 die Welcome Page des appserver.io zu Gesicht bekommen.

Für die Entwicklung der AngularJS-Applikation müssen wir die Entwicklungsumgebung, wie unter [3] beschrieben, noch um einige JavaScript- und CSS/SASS-Tools erweitern, damit wir unsere AngularJS-App bequem mit Yeoman generieren können.

Vorbereitungen

Als Erstes setzen wir unsere appserver.io-Umgebung mit sudo /opt/appserver/server.php -s dev in den Entwicklermodus. Dadurch lassen sich unter anderem regelmäßig auftretende Probleme mit Dateizugriffsberechtigungen während der lokalen Entwicklung vermeiden. Wir starten mit unserer App namens „myapp“, indem wir zunächst das Verzeichnis am dafür vorgesehenen Ort /opt/appserver/webapps/ erstellen.

Um unsere AngularJS-App automatisch mit Yeoman generieren zu können, muss vorerst der entsprechende Yeoman-Generator für AngularJS installiert werden: sudo npm install -g generator-angular.

Nun können wir uns bequem das Grundgerüst der AngularJS-App erzeugen lassen. Wir befinden uns dazu immer noch im Verzeichnis /opt/appserver/webapps/myapp und starten dort mit yo angular den Generator. Der Yeoman-Wizard wird erscheinen und einige Fragen stellen, wie z. B. ob Bootstrap mit installiert werden soll. Am besten wählt man hier fürs Erste die Standardoptionen und klickt sich einfach per Enter-Taste durch.

Da wir den appserver.io natürlich auch für die Auslieferung der App selbst benutzen wollen, ist es sinnvoll, Virtual-Hosts dafür anzulegen. Wir öffnen die entsprechende XML-Konfigurationsdatei unter /opt/appserver/etc/conf.d/virtual-hosts.xml und fügen zwei Virtual-Host-Einträge hinzu (Listing 1), damit beide Arten des lokalen JavaScript Deployments via Grunt getestet werden können.

Listing 1

<virtualHost name="myapp.dist"> <params> <param name="documentRoot" type="string">webapps/myapp/dist</param> </params> </virtualHost> <virtualHost name="myapp.dev"> <params> <param name="documentRoot" type="string">webapps/myapp</param> </params> <rewrites> <rewrite condition="-f{OR}.*\.do.*" target="" flag="L" /> <rewrite condition="^/(.*\.css)$" target="/.tmp/$1" flag="L" /> <rewrite condition="^/(.*)$" target="/app/$1" flag="L" /> </rewrites> </virtualHost>

Wer Erfahrung mit Grunt hat und das Gruntfile, das von Yeoman erzeugt wird, kennt, versteht wahrscheinlich, wieso hier zwei Virtual-Hosts angelegt werden: Man kann Grunt nutzen, um das App-Verzeichnis auf Änderungen zu überwachen und während der Entwicklung immer alles sofort testen bzw. debuggen zu können. Dazu ist es jedoch notwendig, einige Rewrite-Regeln, wie sie z. B. für den Virtual-Host myapp.dev genutzt werden, zu hinterlegen, damit alle statischen Dateien korrekt ausgeliefert werden können. Die App lässt sich natürlich auch ganz normal zu einer Distribution packen, die für den Produktiveinsatz gedacht ist. Alle benötigten Dateien werden hier entsprechend der Gruntfile-Einstellungen verarbeitet und im Unterverzeichnis /dist/ abgelegt. Damit diese Hostnamen auch lokal aufgelöst werden können, hinterlegen wir sie in der /etc/hosts-Datei des Systems:

127.0.0.1 myapp.dev myapp.dist ::1 myapp.dev myapp.dist

Um die Konfiguration auch wirksam zu machen, müssen wir den appserver.io neu starten. Der Befehl dazu unterscheidet sich je Betriebssystem wie folgt:

  • OSX: sudo /opt/appserver/sbin/appserverctl restart

  • Debian/Ubuntu/CentOS: sudo /etc/init.d/appserver restart

  • Fedora: sudo systemctl restart appserver

Nachdem der Neustart erfolgt ist, lassen wir die App via Grunt bauen, indem wir die Grunt-Task watch nutzen. Wie bereits beschrieben, werden dadurch alle Dateien überwacht und Änderungen an der App automatisch verarbeitet. Da die Ausführung des Befeh...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang