seeseekey.net - Invictus Deus Ex Machina

Ein REST-API von Hand entwickelt, benötigt eine Dokumentation, ein entsprechenden Server und eventuell einige Clients als Referenz. Einfacher wird es mit einem Framework wie Swagger. Unter Zuhilfenahme der Beschreibungssprache YAML können mit Hilfe des Frameworks REST-APIs, Dokumentation, Server und Clients generiert werden.

Der Swagger Editor

Der Swagger Editor

Doch Swagger versteht sich nicht nur als Framework, sondern auch als Spezifikation. Begonnen wurde mit der Entwicklung bereits im 2010; die Swagger Specification trägt seit Anfang Januar 2012 offiziell den Namen OpenAPI Specification und beschreibt eine maschinenlesbare Interfacedefinitionen einer REST-API. Ähnliches wurde unter anderem schon mit WSDL und WADL versucht – alles Konzepte bzw. Beschreibungsprachen welche an ihren eigenen Limitationen gescheitert sind und wenn überhaupt nur noch sporadisch genutzt werden.

Betreut und weiterentwickelt wird die Spezifikation nun von der Open API Initiative, zu der namenhafte Firmen wie Google, PayPal, IBM, Atlassian und Microsoft gehören. Die Spezifikation als solche ist freie Software und auf GitHub zu finden. Sie ist unter der Apache Lizenz lizenziert. Aktuell ist die Spezifikation in der Version 2.0 veröffentlicht.

Auf der offiziellen Webseite von Swagger findet sich ein Editor, mit welchem APIs definiert werden können und anschließend exportiert werden können. Der Editor kann dabei Server unter anderem in den Sprachen bzw. für die Framworks Haskel, Jax-RS, Node.js, Python, Rails und PHP erzeugen. Bei den Clients ist die Auswahl noch größer. Diese können in C#, HTML, Dart, Go, Groovy, Java, Javascript, Objective C, Perl, PHP, Ruby, Scala, Swift und vielen weiteren Sprachen erzeugt werden.

Neben dem Editor kann für die Erzeugung von Clients auch der Swagger Codegen genutzt werden. Dabei handelt es sich um eine Java-Anwendung um die Clients lokal auf dem eigenen Rechner zu erzeugen. Der Editor und viele weitere Tools rund um Swagger sind ebenfalls auf GitHub zu finden. – auch diese sind freie Software, welche unter der Apache Lizenz stehen.

Sim City sollte jedem der sich halbwegs für Spiele interessiert ein Begriff sein. Dabei handelt es sich um eine ursprünglich zweidimensionale Simulation einer Stadt. Das klassische Sim City wurde vor einigen Jahren in Form von Micropolis unter einer freien Lizenz veröffentlicht. Mit 3d.city wurde dieses Prinzip nun in die dritte Dimension und in den Browser befördert.

3d.city am Beispiel einer kleinen Stadt

3d.city am Beispiel einer kleinen Stadt

Für die Simulation nutzt 3d.city die Javascript-Implementation micropolisJS bzw. baut darauf auf und nutzt für die 3D-Darstellung die three.js-Engine. Das Spiel ist unter der GPL lizenziert und damit freie Software. Der Quelltext ist auf GitHub zu finden. Ausprobiert werden kann 3d.city unter lo-th.github.io/3d.city/.

Auch wenn Target Blank ein schöner Name für einen Actionfilm wäre, soll es hier stattdessen um das entsprechende HTML-Attribut:

target="_blank"

gehen. Mit Hilfe dieses Attributes kann man den Browser anweisen die verlinkte URL in einem extra Fenster (bzw. einem Tab) zu öffnen. In einem interessanten Artikel der vor knapp einen Monat erschien geht es um Argumente gehen dieses Attribut, bzw. die Nutzung desselben. Das bezeichneste Argument in dem Artikel, ist wie ich finde, die Tatsache das der Nutzer bei der Nutzung des Attributes bevormundet wird. Schließlich kann der Nutzer selber festlegen ob er einen Artikel in einem extra Tab öffnen möchte. Aus diesem Grund sollten wir die Nutzung von target=”_blank” in Zukunft einfach unterlassen.

Bei der mobilen Anwendungsentwicklung steht man vor dem Problem das man für jedes System meist eine andere Sprache sowie andere Klassenbibliotheken benutzen muss. In diese Lücke springt PhoneGap, welches vor kurzem in der Version 1.0 erschienen ist. Dabei handelt es sich um ein quelloffendes Framework mit welchem Anwendungen in JavaScript, HTML und CSS geschrieben werden können welche dann mit dem nativen Elementen der jeweiligen Plattform auf dem Gerät laufen.

Dabei ist es mit PhoneGap möglich Anwendungen für Android, iOS, webOS, Microsoft Windows Mobile, Nokia Symbian OS und RIM BlackBerry zu schreiben. Bezogen werden kann das Framework dabei unter http://www.phonegap.com/.

Weitere Informationen gibt es unter:
http://en.wikipedia.org/wiki/PhoneGap
http://www.pro-linux.de/news/1/17341/phonegap-10-veroeffentlicht.html

Manchmal ist es ganz praktisch wenn man aus einer HTML Tabelle eine CSV erstellen kann. Dazu gibt es unter http://www.codekeep.net/snippets/ec9f4704-b88a-486a-98f9-896de6afb021.aspx auch ein schönes Beispiel. Das Problem an diesem Beispiel ist das es nicht funktioniert. Einige Elemente sehen nach jQuery aus, so das man es ohne diese Bibliothek nicht benutzen kann. Mit “normalem” Javaskript sieht das ganze dann so aus:

function tableRowsToCSV(theRows) 
{
 // Converts table rows into a csv stream
 var csv = "";
 for (var r=0;r<theRows.length;r++) {
 var csvRow = "";

 var theCells = theRows.item(r).cells;
 for (var c=0;c<theCells.length;c++) {
 var cellData="";
 cellData = theCells.item(c).textContent;
 //alert(cellData);
 if (cellData.indexOf(",") != -1) { 
 cellData = "'"+cellData+"'"; 
 }
 csvRow += ","+cellData;
 }
 if (csvRow != "") { 
 csvRow = csvRow.substring(1,csvRow.length); 
 }
 csv += csvRow+"\n";
 }
 return csv;
}

Der Aufruf der Funktion könnte dann zum Beispiel so aussehen:

var csvText = tableRowsToCSV(document.getElementsByTagName("tr"));

Diesen Text kann man dann in Javaskript weiterverwenden oder ihn z.B. an ein PHP Skript (per POST) schicken, welches das ganze dann zum Download anbietet.

Man nehme ein hübsches HTML Formular:

<form>Vorname:
<input maxlength="30" name="vorname" size="30" type="text" />

Nachname:
<input maxlength="30" name="nachname" size="30" type="text" />

</form>

In fast allen Browser sieht das prima aus, nur der Internet Explorer ist der Meinung nach dem Formular einen Zeilenumbruch einzufügen, was in einigen Konstellationen doch recht seltsam aussieht. Glücklicherweise kann man das ganze leicht per CSS verhindern. Dazu müssen wir dem Form Tag die Eigenschaft display:inline zuweisen. Das ganze sieht dann so aus:

<form style="display: inline;">Vorname:
<input maxlength="30" name="vorname" size="30" type="text" />&nbsp;

Nachname:
<input maxlength="30" name="nachname" size="30" type="text" />

</form>