REST-Api mit dem Caddyserver simulieren

Ja, ich bin ein Fanboy. Ja, der bin ich gerne, wenn das „Produkt“ oder Projekt sinnvoll und inspirierend ist. Ich arbeite zum Beispiel in Teams, bei denen jeder Entwickler eigener Herr seiner Maschine ist und ich exakt nichts voraussetzen kann, was jemand auf seinem Rechner installiert hat, wo er es hat und wie es konfiguriert ist.

Wenn man SPAs entwickelt, kann man natürlich für eine reine Frontend-Entwicklung eine komplette Vagrant-Box aufsetzen. Das ergibt für das Backend-Team einfach mehr Sinn. Da nicht jeder über eine generische Umgebung für den Apachen verfügt und das unter Windows z.B. auch eher suboptimal läuft, war ich total begeistert als ich über den Caddyserver gestolpert bin: „Serve the web like it’s 2016“. Caddy hat Binaries für Windows, Linux und OSX und braucht nur ein ziemlich einfaches Konfig-File.

Damit ist ein zweiter Entwickler ohne viel Stress in der Lage, ein SPA-Projekt zu übernehmen. Er braucht die Entwicklungs-Tools und den Caddyserver. Unsere aktuellen SPA-Projekte haben diese Datei schon von mir verpasst bekommen, in der Regel mit Proxy-Rewrites. die auf die Maschine mit dem Backend zeigen.

Aber man kann in den frühen Phasen des Projekts auch eine API und die entsprechenden REST-Requests mit lokalen JSON-Dateien simulieren, damit kann auch ein Abzug einer API lokal statisch genutzt werden. Das ist z.B. bei der Entwicklung von SPAs mit AngularJS oder EmberJS praktisch.

Ein GET-Request an /api/test/eintest  wird damit auf die Datei /data/get_test_eintest.json umgeleitet. Auch Antworten eines Post-Requests lassen sich mit /data/post_test.json simulieren.

Weitere Doku:

Code für einen lokalen API-Abzug in JSON-Files

:9090
gzip
rewrite /api {
	r ^/(.*?)/(.*?)/(.*?)/(.*?)/(.*?)(/|)$
	to /data/{method}_{1}_{2}_{3}_{4}_{5}.json
}
rewrite /api {
	r ^/(.*?)/(.*?)/(.*?)/(.*?)(/|)$
	to /data/{method}_{1}_{2}_{3}_{4}.json
}
 
rewrite /api {
	r ^/(.*?)/(.*?)/(.*?)(/|)$
	to /data/{method}_{1}_{2}_{3}.json
}
 
rewrite /api {
	r ^/(.*?)/(.*?)(/|)$
	to /data/{method}_{1}_{2}.json
}
 
rewrite /api {
	r ^/(.*?)(/|)$
	to /data/{method}_{1}.json
}

Das ganze kann ich auch gerne noch mal als .htaccess-Datei für den Apachen zur Verfügung stellen.

Wochenbericht 2016.07

WTF, HTML and CSS?„:

Reasons HTML and CSS might make you say what the fuck. A curated list of commonly frustrating HTML and CSS quandaries, miscues, and dilemmas.

Created by @mdo.

Das „Manifesto for Half-Arsed Agile Software Development“ kann ich nur unterschreiben. Agil mag der Kunde nicht. In der Regel wollen Kunden wissen, worauf sie sich einlassen, ganz besonders beim Thema Geld und Leistung.

Mit „A Universal Makefile for Javascript“ überlegt Kevin van Zonneveld – und das lese ich nicht zum ersten Mal – ob man mit „simplen“ npm-Scripts statt Taskrunnern vielleicht auch mal einen Gang zurückschalten könnte. Das finde ich auf der einen Seite eine gute Idee, aber eben nicht immer sinnvoll.

Sorting Algorithms“ erklärt einmal sehr anschaulich, wie die verschiedenen Sortierungsalgorithmen funktionieren. Ich finde, die Animationen ein bisschen zu schnell, aber die ganzen Erklärungen gibts auch bei Wikipedia.

Ansonsten fand ich diese Woche sehr hilfreich zu sehen, wie man HTML aus einer API in Angular rendern kann, ohne das Klassenattribute oder Styles entfernt werden. Oder auch, wie man jQuery-Plugins sinnvoll und richtig in AngularJS integrieren kann. Und dann war da noch die Sache mit „gerade genug AngularJS for Designers„.

Wochenbericht 2016.06

The Art of Saying NO – A framework to keep crap out of products“ handelt mal wieder davon, warum ein „Nein“ wichtig ist für ein gutes Produktmanagement. Dazu gehört (quasi als Ursprungsidee) der Artikel „Product Strategy Means Saying No“ von Intercom

Scheinbar geht ein Hype für die ZSH um, insbesondere mit Tools wie „Oh My Zsh„. Ich werde das mal ausprobieren, und bei Gefallen oder Nichtgefallen berichten.

Nachdem ich meine Wohn- und Esszimmer mit einem Philips Hue Starterset aufgemotzt habe (jaja, Internet of Shit…), hat mich die Kommunikation und Funktionsweise der Lampensteuerung mal interessiert. Siehe da, statt in dubiosen Quellen gibts ne Doku direkt bei Philips: „Getting Started“ und „Core Concepts“ zeigen die Funktionen der REST-Api der Hue Bridge mal in schick auf. „Tools and SDK“ hat dann auch gleich eine ziemlich beeindruckende Sammlung von Geräten. Inklusive z.B. einem AngularJS-Service für die Hue-Steuerung. Abgefahren und ziemlich cool. Ach ja: Der Bridge habe ich übrigens direkt den Internet-Zugriff gesperrt.

Dazu passend dann auch die Meldung, auf die ich nur gewartet habe: Geheimdienste überwachen auch das Internet der Dinge. Vielleicht wollen sie aktuell auch erst noch. Ohne dieses kaputte Zertifikatssystem mit den CAs wäre es auch eigentlich gar kein Problem das IoT mit Verschlüsselung per Default zu nutzen.

Wochenbericht 2016.05

GitHub Pages now faster and simpler with Jekyll 3.0 – Das neue Jekyll scheint wirklich einiges einfacher und besser zu machen, wenn es so schnell auch bei Github in der Produktivumgebung landet.

An Introduction To Unit Testing In AngularJS Applications erklärt, wie das Unittesting in AngularJS funktioniert.

How to write bulletproof function wrappers in JavaScript zeigt eine interessante Technik, wie man Funktionen z.B. um Logging oder Exeptionhandling erweitern kann.

Wochenbericht 2016.04

„Serve The Web Like It’s 2016“ ist der Slogan, den der Caddyserver seinen Nutzern ins Gesicht wirft. Und das ist gar nicht so weit hergeholt. Ich habe den Server in einem Kundenprojekt intern als Proxy laufen um Deployment zu sparen und überlege, das ganze bei einem anderen Projekt als Frontend-Proxy einzusetzen (anstelle eines Apachen). Dazu muss ich nur noch rausfinden, ob man das SSL für mehrere Domains ordentlich abfrühstücken kann. Besonders imposant finde ich das automatische Einholen von Let’s Encrypt-Zertifikaten.

TrumpScript – „Making Python great again“. Ich finde ja beeindruckend, mit welcher Geschwindigkeit man heutzutage „Programmiersprachen“ „entwickeln“ kann. Gut, Fakt ist dabei in der Regel, dass sie in eine andere Programmiersprache transpiliert werden. Andere Beispiele: ArnoldC und DogeScript