10. Öffentliche Dienste – Das programmierbare Web

Viele Apps und Websites werden heute nicht nur mit Bibliotheken und viel Code erstellt, sondern nutzen öffentlich verfügbar Programmierschnittstellen (APIs).

CLoud-Anbieter wie Microsoft, Amazon oder Google bieten ganze Sammlungen solcher Dienste, die miteinander verbunden (integriert) sind. Die führt dazu, dass auch komplexe Anwendungen in kurzer Zeit entstehen und damit die Anzahl der Anwendungen exponentiell zunimmt.

10.1 Cloud-Dienste

Cloud-Dienste stellen zum einen Funktionen zur Verfügung. Zum anderen dienen Sie auch dazu, eigene Funktionen isoliert bereitzustellen. Man spricht dann von serverlosem Arbeiten.

Ein typisches Beispiel sind die Lambda-Dienste in Amazon AWS. Hiermit lassen sich einzelen Funktionen erstellen, die einen HTTP-Endpunkt haben. Andere Instanzen können diese Funktionen dann aufrufen. Lambda lässt sich mit Python Java oder Node programmieren. Ich betrachte hier in Fortsetzung der vorherigen Kapitel die Nutzung mit Node und JavaScript.

Die Art und Weise, wie eine Anwendung entsteht, unterscheidet sich dann fundamental von der klassischen Serverinstallation. Eine Anwendung zerfällt in eine Reihe einzelner Dienste, sogenannte Micro-Services. Das ist ideal, wenn du beispielsweise eine App für ein Smartphone entwickelst, die sich auf Dienste stützt. Hier wird keine Auslieferung von HTML oder CSS anstehen, denn dies passiert über den App-Store. Lediglich die persistenten Dienste werden bereitgestellt. Vorteil der Cloud-Architektur ist das smarte Preismodell, das die tatsächliche Nutzung reflektiert und die teilweise extreme Skalierbarkeit. Amazon spricht deshalb auch von der Elastic Compute Cloud”.

Abbildung: Startseite von Amazons EC2
Abbildung: Startseite von Amazons EC2

Amazon ist nicht der einzige Anbieter. Neben den “großen” wie Microsoft oder Google sind viele kleinere Anbieter am Markt mit interessanten Angeboten. Aufgrund des Platzes im Buch und der leichten Erreichbarkeit stelle ich hier stellvertretend Amazon vor.

Fragmente einer Applikationsumgebung

Anwendungen benötigen meist einen immer ähnlichen Stapel von Bausteinen:

Darüberhinaus gibt es Spezialfunktionen wie Spracherkennung, Bildverarbeitung oder Videokompression. Solche System programmiert niemand mehr selbst. Sie sind alle online jederzeit verfügbar.

Amazon S3 – Simple Storage Service

Dies ist der Speicher, hier wird die Anwendung abgelegt. Der Speicherplatz wird als Bucket bezeichnet.

Abbildung: Ein Bucket anlegen
Abbildung: Ein Bucket anlegen

Klick nun auf die Schaltfläche. Im nächsten Schritt werden zwei Dinge abgefragt:

Als Region wähle ich Frankfurt (das ist Frankfurt am Main) – der für mich nächste Platz. Der Name darf keine Sonderzeichen außer “-“ enthalten und muss kleingeschrieben werden. Er ist global eindeutig. Ich wähle für dieses Buch “joergisageek-bookapp”, aber dieser Name ist nun weg – nimm einen anderen.

Lade nun eine erste Datei hoch:

1 

Setze dabei die Zugriffsrechte und mache die Datei dann öffentlich sichtbar.

Automation

Nun werden häufig Änderungen an den Dateien nötig sein. Nutz dann das Werkzeug Gulp, das bereits vorgestellt wurde:

 1 var gulp = require('gulp'),
 2     awspublish = require('gulp-awspublish');
 3 
 4 var localConfig = {
 5   buildSrc: './build/**/*',
 6   getAwsConf: function (environment) {
 7     var conf = require('../../config/aws');
 8     if (!conf[environment]) {
 9       throw 'No aws conf for env: ' + environment;
10     }
11     if (!conf[environment + 'Headers']) {
12       throw 'No aws headers for env: ' + environment;
13     }
14     return { keys: conf[environment], headers: conf[environment + 'H\
15 eaders'] };
16   }
17 };
18 
19 gulp.task('s3:production', ['build:production'], function() {
20   var awsConf = localConfig.getAwsConf('production');
21   var publisher = awspublish.create(awsConf.keys);
22   return gulp.src(localConfig.buildSrc)
23     .pipe(awspublish.gzip({ ext: '' }))
24     .pipe(publisher.publish(awsConf.headers))
25     .pipe(publisher.cache())
26     .pipe(publisher.sync())
27     .pipe(awspublish.reporter());
28 });

Die persönlichen Zugangsdaten sind in einer weiteren Datei geschützt:

 1 module.exports = {
 2   'production': {
 3     'accessKeyId': 'Amazon_s3_production_access_key',
 4     'secretAccessKey': 'Amazon_s3_production_secret_key',
 5     'region': 'Amazon_s3_production_region',
 6     'params': {
 7         'Bucket': 'Amazon_s3_production_bucket_name'
 8     }
 9   },
10   'productionHeaders': {},
11 };

Siehe https://medium.com/wolox-driving-innovation/deploy-your-angularjs-app-to-aws-s3-with-ssl-3635a62533ab#.xac8sieiq

Der Upload alleine reicht nicht, ein weiterer Dienst ist nötig der die Schnittstelle zum Nutzer bereitstellt: CloudFront.

CloudFront

10.2 Freie Dienste

Die beste Quelle für Dienste ist Das programmierbare Web. Es listet derzeit (2017) über 600 APIs. Darunter so bekannte wie Youtube oder Flickr, aber auch seltener benutzte wie BBC oder spezielle wie FedEx.

Wie man einen Dienst anprogrammiert

Alle Dienste zu zeigen ist schlicht unmöglich. Aber es ist ein bisschen wie Autofahren. Kannst du einen, kannst du alle. Als Beispiel zeige ich hier, wie du den aktuellen Wetterbericht in deine App einbindest. Benutzt wird dazu The Weather Channel von Wonderground. Der einfachste Zugriff ist wie bei den meisten Diensten kostenfrei, hier bis 500 Zugriffen am Tag, was fürs Entwickeln völlig ausreicht. Erst wenn die eigene Anwendung richtig viel Traffic verursacht, wird eine Gebühr fällig. Solche Geschäftsmodelle werden oft als Freemium bezeichnet.