href="#u1e4bb489-3fe2-4cb8-99fc-413cee81c42e">8.2Das Projekt aufsetzen
8.2.1Den GraphQL-Server aufsetzen
8.3Das initiale Schema aufsetzen
8.3.1Objekte im Schema auflösen
8.3.4Ergebnisse filtern durch Parameter
8.3.6ID-Referenz-basierte Objekt-Relationen
9Implementierung mit Java II: Erweitertes Schema und Mutationen
9.1Selbstdefinierte Skalar- und Geschäftslogik-Felder
9.1.1Skalar-Typ in Schema und POJO definieren
9.1.2Die GraphQLScalarType-Implementierung
9.1.3Geschäftslogik-Felder und -Parameter
9.2Mutationen erstellen und Schemamodularisierung
9.2.3Adressen erstellen: Input-Typen
9.2.4Bestellung erstellen: verschachtelte Input-Typen
1API-Grundlagen
»APIs sind überall.«
Martin Reddy [46]
Wie der heutige Software-Engineering-Manager bei Apple, Martin Reddy, in seinem Buch API-Design for C++ bereits passend bemerkte, umgeben uns APIs in der modernen Applikationswelt mehr denn je. Der allgemeine Trend, immer mehr Softwareprodukte als einzelne Komponenten zu verpacken und öffentlich oder intern zur Verfügung zu stellen, wird vor allem deutlich, wenn man online nach API-Verzeichnissen Ausschau hält.
Die Onlineplattform ProgrammableWeb [44] verwaltet so ein Verzeichnis bereits seit 2005 und kann seitdem ein durchschnittliches Wachstum von fast 2.000 neu registrierten APIs pro Jahr verzeichnen [49].
Doch wieso gibt es in den letzten Jahren einen derart hohen Anstieg an registrierten APIs? Um diese Frage beantworten zu können, hilft es, sich mit den Grundlagen des Konzepts Application Programming Interface vertraut zu machen.
In diesem Kapitel wird die Frage beantwortet, was ein API eigentlich ist und welche Vorteile es bietet. Neben einer klaren Definition des Begriffs, wird auch ein Einblick in drei technische Umsetzungen Teil dieses Kapitels sein. Das Kapitel ist für Entwickler bestimmt, die sich vorher noch nicht oder nur wenig mit dem Thema API beschäftigt haben oder Grundlagen auffrischen möchten.
1.1Was ist ein API?
API steht für Application Programming Interface – oder auf Deutsch: Anwendungs-Programmier-Schnittstelle. Die Idee des API ist schon relativ alt: 1952 formulierte David Wheeler, Informatikprofessor an der Universität Cambridge, einen Leitfaden zum Extrahieren einer Subroutinen-Bibliothek mit einheitlichem, dokumentiertem Zugriff [59]. Mit dieser Arbeit legte er den Grundstein für die Idee heutiger APIs.
Der Begriff selbst kam zum ersten Mal in einem Konferenzbeitrag von Ira Cotton und Frank Greatorex auf der Fall Joint Computer Conference im Jahr 1968 auf [13]. Darin erweiterten sie die Idee von David Wheeler insofern, als dass die Implementierung und Schnittstelle der Subroutinen-Bibliothek konzeptionell voneinander zu trennen sind. Somit kann die logische Komponente ohne Einfluss auf den Benutzer der Schnittstelle ausgetauscht werden.
»APIs sind wie User Interfaces – nur mit anderen Nutzern im Fokus.«
David Berlind [8]
APIs sind wie Nutzer-Schnittstellen, nur für andere Nutzer konzipiert, so Berlind. Während ein User Interface (UI) die Interaktion eines Menschen mit dem System ermöglicht, soll ein API anderen Systemen diese Interaktionen gewähren. Es ist also anders als eine UI kein »human-readable interface«, sondern ein »machine-readable interface«.
In einem abstrakten Beispiel kann man sich ein API als Steckdose vorstellen. Computer, Staubsauger, Mixer, Toaster – ganz unterschiedliche Geräte nutzen den Service »Strom« des Serviceanbieters »Steckdose« für verschiedene Zwecke. Dadurch werden diese Geräte Konsumenten eines Service über einen einheitlichen Serviceanbieter.
Damit dieser Zugriff der unterschiedlichen Systeme auf dieselbe Steckdose funktioniert, müssen bestimmte und bekannte Muster, wie die Geräte verbunden werden können, sowie genaue Spezifikationen des angebotenen Service vorliegen.
Die genaue Spezifikation des Service hinter der Schnittstelle Steckdose ist dabei, wie in Abbildung 1–1 zu sehen, bestimmt von Daten, wie etwa 230 V Spannung auf 16 A Stromstärke. Das stellt die Art des Service dar, legt also fest, was genau über das API versendet wird, und definiert seine Repräsentation – also in welcher Form der Service im System des Servicenutzers integriert werden kann.
Die Form der Steckdose legt dabei fest, wie genau ein Nutzer den Service ansprechen muss, um die entsprechende Repräsentation des Stroms integrieren zu können. Die Steckdose ist daher in diesem Beispiel die eigentliche Schnittstelle – also das API. Die Form ist seine technische Umsetzung. Wie im Beispiel von Abbildung 1–1 können dabei mehrere gleiche Steckdosenformen eine Abstraktion für unterschiedliche Servicespezifikationen sein. Repräsentation und technische Umsetzung sind also unabhängig voneinander.
Wie bei der Steckdose bietet auch das API einen Service, der von unterschiedlichen Konsumenten in genau spezifizierter Form – also Repräsentation – über eine genau definierte Schnittstelle angefordert und ausgeliefert werden kann. In der Anwendung sind das beispielsweise geografische Kartendaten bei Google Maps als Service, die in einer Webseite oder mobilen Applikation für die Anzeige eigener Karten konsumiert werden.