API – Grundlagen

21.12.2020

Einleitung

In meinem letzten Blogbeitrag habe ich Ihnen das „Shop Floor Management (SFM)“ und dessen Anwendung im „Use Case“ des Studienmoduls „Advanced Manufacturing“ an der FHWS nähergebracht. Das Ziel der Studierende ist es die Maschinenstörungsdaten aus einer virtuellen Produktionsumgebung (FORCAM) in einer managementtauglichen Pareto-Darstellung zusammenzufassen, um so ein effizientes SFM-System zu entwickeln. Die Störungsdaten müssen demnach aus FORCAM in ein anderes System importiert und bilateral synchronisiert werden. Demnach muss eine Verbindung zwischen den Systemen hergestellt werden, sodass ein Datenaustausch stattfinden kann. Dies erfolgt mittels einer so genannten „API“. Doch was ist überhaupt eine API und wie wird sie eingesetzt? Diesen und weiteren Fragen widmen wir uns im heutigen Blogbeitrag.

Was ist eine API?

Das Akronym API steht für „Application Programming Interface“ was ins Deutsche mit Programmierschnittstelle übersetzt werden kann. Wie der Name bereits vermuten lässt, gestaltet eine API die programmatische Form einer beliebigen Anwendung. Die Schnittstelle dient dazu Informationen zwischen verschiedenen Anwendungen auszutauschen (Davis 2019). Dabei findet die Kommunikation der Systeme auf eine definierte Art und Weise statt, da der verwendete „Satzbau“ (Syntax) der Kommunikationsmodule vorher festgelegt wird (Luber und Augsten 2017). Die API ermöglicht den Austausch und legt fest wie die Informationen zwischen den Modulen empfangen und versendet werden.

Der Einsatz von APIs hat in den letzten Jahren stark zugenommen. „Facebook“ bietet beispielsweise unter https://developers.facebook.com/ eine Plattform zum Erstellen von Anwendungen an. Software-Entwickler können mit Hilfe der sozialen Verbindungen und Profilinformationen, die von APIs bereitgestellt werden, ansprechendere Anwendungen generieren. Facebook-APIs können durch Applikationen von Drittanbietern verwendet werden, um Aktivitäten im Newsfeed von Facebook zu veröffentlichen. Dies kann durch die Anpassung der Privatsphäre-Optionen des Nutzers jedoch verhindert werden. Die API verwendet das RESTful-Protokoll, welches im weiteren Verlauf noch umrissen wird. (De 2017, S. 8)

Arten von Schnittstellen

Die Programmierschnittstelle wird auf verschiedene Arten klassifiziert. Grundsätzlich existieren einerseits öffentliche APIs, welche keiner Nutzerrestriktion unterstehen und andererseits private Schnittstellen, welche nur von einer definierten Usergruppe zugänglich sind. Bei privaten Schnittstellen kann noch eine weitere Unterteilung in interne und in Partner APIs, welche häufig im B2B-Bereich Verwendung finden, vorgenommen werden. (vgl. Abbildung 1).

Abbildung 1: Arten von APIs (De 2017, S. 7)

An andere Stelle wird zusätzlich zwischen den folgenden vier Klassen differenziert:

  • Funktionsorientierte API
  • Dateiorientiert API
  • Protokollorientiert API
  • Objektorientiert API

Bei der funktionsorientierten Schnittstelle wird der Software ein direkter Zugang auf die Hardware eines Systems gestattet. Die Dateiorientiere API wird dadurch gekennzeichnet, dass die Kommunikation einer Komponente mit dem Speichermedium (z.B. Dateien) eines Computers umgesetzt werden kann. Durch den „Request“-Befehl können somit Dateien bezogen oder auch verändert werden. Dabei werden die notwendigen Zugriffsrechte durch das Betriebssystem verwaltet. Die nächste Schnittstellenart operiert mittels Protokolle und ist nicht abhängig vom Betriebssystem oder der Hardware, wodurch die Flexibilität erhöht wird. Objektorientierte Schnittstellen finden Anwendung, wenn die Funktionalität verschiedener Klassen miteinander kombiniert werden sollen. (o. V. 2020, S. 1)

REST-API

Nicht nur Facebook verwendet REST, sondern auch das FORCAM-System wird durch eine REST-API angesprochen. REST steht für „REpresentational State Transfer“ und ist eine Softwarearchitektur, welche bei der REST-API-Anwendung findet. Eine Schnittstelle wird als REST-API oder „RESTful“ bezeichnet, wenn die folgenden sechs Grundsätze erfüllt werden:

  1. Client-Server-Modell: Belange der Benutzeroberfläche werden von den Belangen der Datenspeicherung getrennt.
  2. Stateless (Zustandslosigkeit): Jede Anfrage vom Client an den Server muss alle Informationen enthalten, die notwendig sind, um die Anfrage zu verstehen. Der Sitzungsstatus wird daher vollständig auf dem Client gehalten.
  3. Cacheable: Daten werden innerhalb einer Antwort auf eine Anforderung implizit oder explizit als cachefähig oder nicht cachefähig gekennzeichnet (Cache = Zwischenspeicher oder Puffer).
  4. Uniform Interface: Die einheitliche Benutzeroberfläche von REST wird durch die Bedingungen „Identifizierung von Ressourcen“, „Manipulation von Ressourcen durch Darstellungen“, „selbstbeschreibende Nachrichten“ und „Hypermedia als Antrieb des Anwendungsstatus“, definiert.
  5. Layered System: Aufbau durch hierarchisches Schichtsystem, welches das Verhalten der Komponenten so eingeschränkt, dass jede Komponente nicht über die unmittelbare Schicht, mit der sie interagiert, hinaus „sehen“ kann.
  6. Code on Demand: Client-Funktionalität ist durch Herunterladen und Ausführen von Code in Form von Applets oder Skripten erweiterbar.

Die besondere Architektur der REST-API ergeben diverse Vereinfachungen. Beispielsweise wird durch „Client Server“ (1. Grundsatz) die Portabilität der Benutzeroberfläche über mehrere Plattformen hinweg und die Skalierbarkeit durch Vereinfachung der Serverkomponenten optimiert. Eine weitere Verbesserung wird durch die Vereinfachung der Clients durch die Reduzierung der Funktionsanzahl, die vorab implementiert werden müssen, erzielt (6. Grundsatz). (Fielding 2000, S. 76–86) In der Praxis wird das REST-Paradigma per HTTP/S umgesetzt, indem die Services durch eine URL angesprochen werden. Dabei werden u.a. die Operatoren „GET“ (Datenanforderung), „POST“ (Datenübermittlung), „PATCH“ (Datenänderung) oder „DELETE“ (Datenlöschung) verwendet. (Srocke und Karlstetter 2017) Neben REST werden weitere Protokolle wie „SOAP“, „XML-RPC“ oder „JSON-RPC“ in Zusammenhang mit APIs eingesetzt (Davis 2019).

Autorisierung

Ein wichtiger Aspekt bei der Benutzung von API ist die Autorisierung des Users, denn anderenfalls wäre ein beschränkter Zugriff auf die Applikation nicht realisierbar. Die Autorisierung des Users kann auf verschiedene Arten stattfinden. Nachfolgend liegt der Fokus jedoch auf der „OAuth“ Technologie, weil diese sehr weit verbreitet ist und im Use Case der Studierenden Anwendung findet. In der nachfolgenden Darstellung wird ein Programmablauf schematisch aufgezeigt (Abbildung 2).Abbildung 2: Ablaufbeispiel OAuth Autorisierung (Preibisch 2018, S. 66)

Das Programm startet durch das Anwählen des Feldes „Show Calender“ durch den „Resource Owner“ (Benutzer der Anwendung). Anschließend wird die Anfrage an die Applikation (Client) weitergegeben und durch diese per „GET“-Befehl an den Autorisierungsserver (AS) weitergeleitet. Im Folgenden stellt der AS, unter der Bedingung des korrekten Benutzernamens und Passwort, der Applikation (Client) einen „Acces token“, also eine Zutrittsmarke, zur Verfügung. Dieser wird wieder über „GET“ an den „Resource Server“ geschickt und verifiziert. Bei positiver Überprüfung erfolgt der Zugriff des Benutzers auf den Kalender und der Ablauf ist abgeschlossen. Auffällig hierbei ist, dass die Zugangsdaten des Benutzers lediglich dem AS gesandt werden und nicht der Applikation oder dem „Resource Server“. (vgl. Abbildung 2)

Umsetzung im Anwendungsfall

Im letzten Abschnitt des heutigen Beitrages, wird kurz auf den Python-Code eingegangen, welcher den Zugriff über die REST API auf das virtuelle Produktionssystem FORCAM umsetzt. Hierfür wird eine Funktion programmiert, die den „Access Token“ per URL-Request (1) anfragt. Dabei wird das beschriebene Autorisierungsprotokoll „OAuth“ (2) benutzt und der Nutzername „client_id“ (3) sowie das Passwort „client_secret“ (4) übergeben (Abbildung 3).

Abbildung 3: Python Code – Abfrage des Access Token (eigene Darstellung)

Durch das in Abbildung 4 visualisierte Programmstück werden die Anmeldedaten, welche in diesem Fall „gruppe4“ (Zeile 2) und „2g4Wt9UP6B“ (Zeile 3) lauten, für den Authentifizierungstoken eingegeben. Zusätzlich werden das Access Token (Zeile 4) sowie das „Refresh-Token“ (Zeile 7) inklusive der Zeitdauer (Zeile 6) übergeben.

Abbildung 4: Python Code – Eingabe Anmeldedaten (eigene Darstellung)

Zusammenfassung

Zusammenfassend bleibt festzuhalten, dass APIs Programmierschnittstellen für verschiedene Applikationen von unterschiedlichsten Ausprägungen sind. Diese sind durch einfache und modulare Benutzung gekennzeichnet. Dabei werden Autorisierungstechnologien, wie die „OAuth“ eingesetzt, um die Berechtigung des Users zu verifizieren. Die REST-API wird aufgrund der einzigartigen und vorteilhaften Systemarchitektur besonders häufig eingesetzt. In einem weiteren Beitrag, welchen Dominik Goletz veröffentlicht, wird der Zugriff mittels einer API auf das Programm „Trello“ erläutert.

Literaturverzeichnis

Davis, Thomas (2019): What is An API and How Does It Work? Hg. v. towards data science. Online verfügbar unter https://towardsdatascience.com/what-is-an-api-and-how-does-it-work-1dccd7a8219e.

De, Brajesh (2017): API management. An architect’s guide to developing and managing APIs for your organization. First edition. New York: Apress.

Fielding, Roy. (2000): Architectural Styles and the Design of Network-based Software Architectures. Dissertation. University of California, Irvine, California, USA. Online verfügbar unter https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm.

Luber, Stefan; Augsten, Stephan (2017): Was ist eine API? Dev Insider. Online verfügbar unter https://www.dev-insider.de/was-ist-eine-api-a-583923/.

ohne Verfasser (2020): API – Application Programming Interface. Was ist eine API und welche Arten gibt es? Hg. v. t2informatik. Online verfügbar unter https://t2informatik.de/wissen-kompakt/api/.

Srocke, Dirk; Karlstetter, Florian (2017): Was ist eine REST API? Cloudcomputing Insider. Online verfügbar unter https://www.cloudcomputing-insider.de/was-ist-eine-rest-api-a-611116/.

Moritz Lotzen

Moritz Lotzen

Student