WJAX 2017: Web-APIs, einfach oder?

Datum: 20. November 2017
Autor: Regina Staller


Wie im letzten Blog von mir erwähnt wurde, habe ich auf der diesjährigen WJAX einen Vortrag über den effektiven sowie effizienten client- und serverseitigen Umgang mit Web-APIs besucht. Gehalten wurde dieser Vortrag von Thilo Frotscher. Die wesentlichen Themen aus dieser Session möchte ich hier gerne noch einmal vorstellen. Besonders im Bereich IBE/Metasuche bin ich schon einmal auf die ein oder andere Problematik gestoßen und habe aus diesem Vortrag viele Ideen und Konzepte mitgenommen, welche ich im Arbeitsalltag anwenden kann.

Der Vortrag behandelte die Herausforderungen und Fallstricke bei der Implementierung und Wartung von Web APIs. Dabei wies Thilo Frotscher zu Beginn der Session auf die „Seven Fallacies of Distributed Computing“ (Deutsch, 1994) hin:

  1. The network is reliable.
  2. Latency is zero.
  3. Bandwidth is infinite.
  4. The network is secure.
  5. Topology doesn’t change.
  6. There is one administrator.
  7. Transport cost is zero.

James Gosling hat diese Fallstricke um einen weiteren Punkt erweitert:

  1. The network is homogeneous.

Diese Irrtümer müssen von jedem API Entwickler bedacht werden. Um diese Fallstricke zu umgehen, darf eine Web-API nicht nur für den Normalzustand entwickelt werden, sondern explizit für den Fehlerfall: Das sogenannte Prinzip des ‚Design for failure‘. Ausfälle, Fehler und Verbindungsprobleme stellen nicht die Ausnahme, sondern die Regel dar. Im Zuge dessen muss jeder API Entwickler eine Strategie für den Fehlerfall definieren, um das System von Beginn an widerstandsfähig zu entwickeln.

Auf der clientseitigen Entwicklung muss deshalb damit gerechnet werden, dass eine Server-Response entweder gar nicht verfügbar sein kann oder man auf die Server-Response sehr lange warten muss. Falls der Client naiv implementiert wurde, wartet man dann schlimmstenfalls für immer auf die Response und die Anwendung wäre komplett blockiert. Der default Connection Timeout des http Protokolls ist standardmäßig unendlich. Dies ist nur wenigen Entwicklern bekannt, wie in der Session aufgekommen ist.

Um diese clientseitige Blockade im Fehlerfall zu umgehen, muss man sich unbedingt Gedanken über Connection- sowie Read-Timeouts, Retry-Konzepte sowie über ein Default-Verhalten der Anwendung im Fehlerfall machen. Bei der Wiederholbarkeit von Requests ist dabei zu bestimmen wann welche Requests wie häufig noch einmal abgefeuert werden können.

Auch hat Thilo Frotscher in diesem Zusammenhang den ‚Circuit Breaker‘ (Sicherungskasten) angesprochen. Um eine Anwendung im Fehlerfall vor einem kompletten Absturz zu bewahren, wird eine Sicherung eingebaut, welche die ‚Überhitzung‘, also die komplette Überlastung des Systems verhindert.

Auch die ‚Bulkheads‘ (Schotten) sind ein wichtiges Konzept für das Prinzip ‚Design for failure‘. Dabei wird die Anwendung im Problemfall „über Wasser gehalten“, d.h. eine Teilfunktionalität bleibt erhalten. Die Systembestandteile werden sozusagen voneinander möglichst weitgehend isoliert. Dies kann man durch den redundanten Einsatz von Hardware, der Bindung bestimmter Prozesse an bestimmte CPUs, der Trennung von Business-Funktionalität auf diverse Server-Cluster sowie durch die Verteilung von Funktionalität auf mehrere Thread-Pools erreichen.

Zudem erwähnte der Speaker den Einsatz von Sicherheitsmaßnahmen in der Web-API Entwicklung. Bei der Authentifizierung sprach er sich für JSON Web Tokens sowie OAuth aus. Des Weiteren hat sich neben der Verschlüsselung über SSL/TLS folgende Sicherheitsmaßnahme bewährt: Kein Einsatz von API Keys in der URL.

Die hier genannten Punkte stellen nur einen Bruchteil der zu bedenkenden Maßnahmen in der ‚Design for failure‘ API Entwicklung dar. Es gibt natürlich noch weitere Konzepte, welche hierbei berücksichtigt werden müssen bzw. können. Alles in allem ein sehr interessanter Vortrag, der wichtige Ansätze für die Web-API Entwicklung lieferte.

Kommentare

Selber kommentieren:






Weitere Beiträge zum Thema Technologie


Kleiner Postfix- Guide

Autor: Sascha Nützel


Technologie // Über den Tellerrand


Nachdem die letzten Tage „kleinere“ Postfix Probleme aufgetreten sind, hier mal ein kleiner Guide wie man sich den Mail- Queue anschauen und bereinigen kann. Mail- Queue anschauen mailq | less Um die Anzahl der Mail’s in der Queue anzuzeigen, je nach Menge kann dies ein paar Minuten dauern: mailq | egrep ‚^–‚ Um den Queue von …


Beitrag lesen
14.
Februar
2017

Follow-up zu Vortrag beim imx.Camp – „Technologie-Umstellung bei Twitter“

Autor: Christian Göbel


Technologie


Wie mir gerade bewusst wird, muss ich eine Aussage aus meinem Vortrag beim imx.Camp korrigieren: Twitter ist nicht bei der US-Präsidentschaftswahl im Jahre 2008 in weiten Teilen von Ruby auf Scala (Java Virtual Machine) umgestiegen, sondern erst während der US-Wahlen im Jahre 2012. Wen’s interessiert, der kann die Hintergründe hier nachlesen: Twitter’s Shift from Ruby …


Beitrag lesen
22.
Oktober
2015

Mass Apache .htaccess redirect generator

Autor: Benjamin Hofmann


Technologie


Vielleicht für den einen ganz nützlich wenn in einem Projekt mal wieder gefühlt hunderttausende Redirects notwendig sind: http://redirectgenerator.netmagnet.cz/. Hiermit ist es sehr einfach statische Redirects zu generieren, also ohne reguläre Ausdrücke in den URLs, die dann an Variablen übergeben werden. Das Tool habe ich schon ein paar mal kurz genutzt und fand es durchaus hilfreich …


Beitrag lesen
18.
Januar
2017

Messung Dokumentgröße

Autor: Bastian Schwarz


Projekte // Technologie


Seit kurzem scheint die Anzeige der Dokumentgröße über die Web Developer Toolbar im Firefox nicht mehr korrekt zu funktionieren. Es wird häufig die Komprimierung von Scripten / Stylesheets nicht mehr korrekt erkannt.  Alternative Google Chrome – Developer Tools  Kurzanleitung Über Tools – Entwicklertools öffnen, auf „Network“ Tab wechseln, Seite mit Strg+F5 neuladen. Jetzt sieht man …


Beitrag lesen
16.
April
2013