Kai Spichale: API-Design

Kai Spichale: API-Design

Kai Spichale
API-Design. Praxishandbuch für Java- und Webservice-Entwickler.

2., überarbeitete und erweiterte Auflage
April 2019, 382 Seiten, Broschur
dpunkt.verlag
ISBN 978-3-86490-611-4

Informationen zum Buch im Katalog der Deutschen Nationalbibliothek.



Das Buch behandelt Application Programming Interfaces (APIs) und deren Design. Dabei wird auf Spezifika programmatischer Schnittstellen in Java und von Remote-Schnittstellen eingegangen.
Auch wenn Kai Spichales Buch diverse Schwächen aufweist, kann es durch den angenehmen Schreibstil und durch die Fülle an Informationen eine nützliche und angenehme Lektüre für Software-Entwickler und Software-Architekten darstellen.


Struktur

Das Buch API-Design ist in vier Teilen unterteilt. Nach einer Vorstellung der Grundlagen werden die beiden Hauptthemen des Buches auf jeweils knapp hundert Seiten behandelt:

  • Java-APIs, d.h. Designprinzipien für Klassen-, Package- und Modulschnittstellen
  • Remote-APIs, d.h. hauptsächlich REST, SOAP und Messaging.

Abgeschlossen wird das Buch mit mehr oder minder übergreifenden Themen wie Dokumentation, Caching, Skalierbarkeit und API-Management.

Inhalt

Grundlagen

Application Programming Interfaces – eine Einführung

Der erste Teil des Buches beginnt mit einer sehr überschaubaren Geschichte der APIs. Diese fängt mit der Beschreibung des Konzepts der Subroutine (1948) durch Herman Goldstine und John von Neumann und endet mit den Web-APIs der Softwaregiganten wie Facebook, Twitter und Google, welche den Begriff der API maßgeblich geprägt haben.

Was eine API ist, wird anhand des entsprechenden Wikipedia-Artikels definiert: eine API ist ein „Programmteil, das von einem Softwaresystem anderen zur Anbindung zur Verfügung gestellt wird“ (S. 7). Vor- und Nachteile von APIs werden herausgearbeitet und das Konzept der APIs als Produkte wird kurz vorgestellt. Als Hauptmerkmal einer guten API wird angesehen, dass ihre Benutzung Spaß macht und Reibungsverluste durch intuitive Benutzbarkeit und guter Dokumentation minimal sind (S. 10).

Qualitätsmerkmale

Durch Beispiele unterstützt, werden die Qualitätsmerkmale von APIs (Benutzbarkeit, Effizienz und Zuverlässigkeit) diskutiert. Als Metrik für die Änderbarkeit von APIs wird die Konnaszens präsentiert – eine Erweiterung des Stoffes gegenüber der ersten Auflage des Buches.

Allgemeines Vorgehen beim API-Design

Das Vorgehen beim Design einer API ist nicht vom Entwicklungsprozess selber zu trennen. Wenig verwunderlich wird entsprechend die Wichtigkeit der Herausarbeitung der Anforderung hervorgehoben.

Java-APIs

Ausprägungen

Der Autor unterscheidet zwischen vier Ausprägungen von APIs: Implizite Objekt-APIs, APIs von Utility-Bibliotheken, Service-Schnittstellen und Schnittstellen von Frameworks. Er schlussfolgert pragmatisch, dass der Grad in dem eine API optimiert werden soll, eine Frage der Priorität ist, Priorität, die von der „Sichtbarkeit der API“ und der „beabsichtigten Arbeitsteilung“ abhängig gemacht werden sollte (S. 44) .

Grundlagen für Java-APIs

Im Kapitel Grundlagen für Java-APIs unternimmt der Autor eine Tour de Force durch ziemlich allgemeine Themen der objektorientierten Entwicklung – ein Unterfangen, das im nächsten Kapitel fortgeführt wird. So wird mit der Namensgebung für Parameter, Methoden und Klassen angefangen, um dann auf einige Techniken für Objektkollaboration (Tell – Don’t Ask, Command/Query Separation und Law of Demeter) einzugehen. Fehlerbehandlung (Exceptions in Java werden relativ umfangreich besprochen), einige Entwurfsmuster (Null-Objekt plus die klassischen Erzeugungsmuster der Gang of Four), Interfaces (zusammen mit dem klassischen Thema Vererbung vs. Komposition) runden das Kapitel ab.

Fortgeschrittene Techniken für Java-APIs

Weiterhin werden zusätzliche Techniken (Fluent Interfaces und DSLs, Immutability), weitere Entwurfsmuster (diverse Struktur- und Verhaltensmuster der Gang of Four) und Sprachfeatures (Annotationen und Techniken zur Thread-Sicherheit) vorgestellt.

Kompatibilität von Java-APIs

Im siebten Kapitel bespricht Spichale eines der sehr wichtigen Aspekte einer API – deren Kompatibilität. Es wird zwischen Code-Kompatibilität, binärer und funktionaler Kompatibilität unterschieden. Design by Contract und diverse Techniken um die Kompatibilität zwischen zwei API-Versionen zu überprüfen und mit der Zeit unumgänglichen inkompatiblen Änderungen umzugehen, werden diskutiert.

Remote-APIs

Grundlagen RESTful HTTP

Der Titel des Kapitels sagt eigentlich alles: es werden REST als Architekturstil und HTTP als Protokoll, das zur Implementierung dieses Stils dient, dargestellt. Es werden folgende Themen behandelt: Ressourcen, Hypermedia, Statuslosigkeit als wichtiges Merkmal von REST, HTTP als Protokoll (Methoden, Header, URIs und URLs) und HATEOAS.

Techniken für Web-APIs

In diesem Kapitel werden weitere relevante Aspekte des RESTful HTTP diskutiert: Konsistenz der URIs, XML und JSON für die Darstellung von Ressourcen, Links und sogenannte Hypermediafaktoren (H-Faktoren), HTTP-Statuscodes, Versionierung von HTTP-APIs, Sicherheit (Basic Authentication, OAuth 2 und OpenID Connect), Paging und Cursoring. Am Ende des Kapitels werden GraphQL und OData – zwei weitere thematische Erweiterungen der zweiten Version des Buches – als Techniken für spezielle Use Cases vorgestellt.

SOAP-Webservices

SOAP ist bei Weitem nicht mehr so populär wie es zu seinen Hochzeiten war, behält aber weiterhin seine Relevanz. Aus diesem Grund präsentiert Spichale das SOAP-Protokoll im Kapitel SOAP-Webservices. Den Abschluss macht eine Gegenüberstellung zwischen RESTful HTTP und SOAP, wobei ganz klar die erstere Technologie bevorzugt wird.

Messaging

Der dritte und vorletzte Teil wird mit dem Thema Messaging abgeschlossen. Konzepte (Broker, Throttling, Publisher/Subscriber etc.) sowie Produkte (Apache ActiveMQ, RabbitMQ, Apache Kafka u.a.) und Protokolle und Standards (JMS, STOMP, MQTT u.a.) werden beschrieben und diskutiert.

Übergreifende Themen

Dokumentation

Dokumentation ist zwar ein übergreifendes Thema, jedoch mit unterschiedlichen Ausprägungen für Java-APIs und Remote-APIs. Entsprechend ist das Kapitel unterteilt. Im Bereich Java wird Javadoc besprochen und es wird diskutiert was dokumentationswürdig auf Methoden-, Klassen- und Package-Ebene ist. Im Bereich Remote-APIs wird die Dokumentation mit Swagger und RESTful API Modeling Language (RAML) beschrieben. Weitere Möglichkeiten werden zum Schluss aufgelistet.

Caching

Caching wird als Möglichkeit der Performanceoptimierung vorgestellt. So werden allgemein Konzepte des Cachings vorgestellt mit einem starken Fokus auf das HTTP-Caching, dem mehrere Seiten eingeräumt werden.

Skalierbarkeit

Das Kapitel Skalierbarkeit beginnt mit der Beschreibung von Sinn und Zweck von Skalierbarkeit und mit der Präsentation der zwei grundlegenden Skalierungsarten: vertikale und horizontale Skalierung. Anschließend werden Möglichkeiten des Load Balancings aufgelistet (DNS Load Balancing, Hardware und Software Load Balancer). Auf konkrete Probleme beim Skalieren von Datenbanken und Messanging-Systemen wird ebenfalls eingegangen.

Erweiterte Architekturthemen

Im vorletzten Kapitel des Buches bespricht Spichale die Themen Consumer-Driven Contracts, das architektonische Muster der Backends for Frontends und einige Spezifika der Netflix-APIs.

API-Management

APIs benötigen eine komplexe Infrastruktur, um erfolgreich zu sein. Dieses Thema nennt sich API-Management und umfasst die Aspekte Sicherheit, Community, Monetarisierung, Monitoring, Traffic-Management, Dokumentation und einiges mehr. Dies alles wird im letzten Kapitel des Buches besprochen.

Diskussion

Kai Spichale macht in seinem Buch eine Tour de Force durch sehr viele der heute relevanten Themen für einen Software-Entwickler. Zwar sind die Code-Beispiele in Java geschrieben, die Prinzipien lassen sich aber mit größter Leichtigkeit in vermutlich jeder objektorientierten Sprache anwenden und das Thema Remote-APIs ist vollkommen programmiersprachenagnostisch gehalten.

Dass sowohl öffentliche Schnittstellen von Bibliotheken und Frameworks als auch entfernte Schnittstellen besprochen werden, ist richtig. Der Begriff API ist jedoch – unabhängig von diesem Buch – so schwammig, dass letztendlich alles unter dem API-Hut gepackt werden könnte. Dessen ist sich der Autor auch bewusst als er schreibt „APIs sind allgegenwärtig, weil selbst einzelne Objekte eine implizite API besitzen“ (S. 44). Somit braucht es aber auch nicht zu verwundern, wenn der zweite Teil des Buches wenig mehr als eine Zusammenfassung objektorientierter Prinzipien, Muster und Best-Practices darstellt. Ebenfalls beinhaltet der letzte Teil etliche Aspekte wie Load Balancing, Microservices und Caching, die eher dem Thema Architektur – wieder ein schwer zu umreißender Begriff – zuzuordnen wären.

Das alles lässt das Thema des Buches selbst etwas schwammig wirken, Schwammigkeit, die zuweilen von einer gewissen Oberflächlichkeit verstärkt wird. So ist die Beschreibung von OAuth2 – ein komplexes Autorisierungsprotokoll – nur um wenige Zeilen länger als die Beschreibung des fast trivialen HTTP Basic Authentication-Protokolls (S. 207f). Die fünf Erzeugungsmuster, welche die Gang of Four beschreiben, sind auf die IT-Literatur zum Thema verweisend sehr knapp auf einer halben Seite beschrieben (S. 78), während der Beschreibung des Null-Objekt-Musters etwa eine Seite eingeräumt wird (S. 70f). Was nicht an und für sich schlecht ist, hinterlässt zumindest die Frage nach dem Grund für diese Präferenzen und an vielen Stellen das Bedürfnis nach mehr Information.

Es ist als außerordentlich positiv hervorzuheben, dass das Buch mit der Geschichte des Begriffes API und einiger wichtigen API-Meilensteine beginnt. Historische Informationen schaffen für gewöhnlich einen Rahmen, der zur allgemeinen Orientierung sehr nützlich ist. Eine eingehendere Betrachtung der Geschichte des API-Konzeptes und der Art wie Web-APIs letztendlich die Welt in den letzten zehn Jahren verändert haben („APIs sind der Kleber, der unsere digitale Welt zusammenhält.“ (S. vii)), wäre ebenfalls interessant gewesen.

Auch wenn Kai Spichales Buch diverse Schwächen aufweist, kann es durch den angenehmen Schreibstil und durch die Fülle an Informationen eine nützliche und angenehme Lektüre für Software-Entwickler und Software-Architekten sein.


Zum Autor

Kai Spichale ist Software-Architekt und Berater mit mehr als zehn Jahre Erfahrung in mehreren international tätigen Unternehmen.

API-Design, sein bisher einziges längeres Buch, erschien 2019 in seiner zweiten Version. Kleinere Schriften von Spichale sind u.a. Testwissen für Java-Entwickler und Big Data – Apache Hadoop (Mitautor).


Folgende Bücher könnten Sie ebenfalls interessieren:

Petre Sora

Petre Soras Interessen sind vielfältig und befinden sich an der Schnittstelle zwischen Mensch und Informationstechnologie. Als studierter Psychologe und Software Engineer war er knappe sechs Jahre als Java-Entwickler in mehreren Unternehmen tätig. Mit der Gründung der Rezensionsplattform nososo hat er sich entschieden eigene Wege zu gehen. Petre ist als Rezensent und Verfasser von Artikeln für nososo tätig.

Schreibe einen Kommentar