Taminoful

Administrator
Okt. 28, 2017
12
1
Hachja, die richtige Terminologie ist in der Entwicklung fast so wichtig, wie die Planung und Umsetzung selbst. Jeder kennt es, kaum einer kann es beschreiben und viele scheitern bei der Erklärung dieser drei Fachbegriffe. Aber was genau sind nun die Unterschiede zwischen API, Library und Framework?
Das möchte ich heute versuchen zu erklären.


API
Die Textbuch Definition zu API lautet ungefähr wie folgt:
Eine Programmierschnittstelle, genauer Schnittstelle zur Anwendungsprogrammierung, häufig nur kurz API genannt (englisch application programming interface, wörtlich ‚Anwendungsprogrammierschnittstelle‘), ist ein Programmteil, der von einem Softwaresystem anderen Programmen zur Anbindung an das System zur Verfügung gestellt wird.

Quelle: Wikipedia

Um das nun verständlich auszudrücken.
Die API ist der Bote, der Anfragen entgegennimmt und einem System mitteilt, was du tun möchtest und dir die entsprechenden Antworten des Systems zurückliefert.

Um das anhand eines vertrauten Beispiels zu erklären.
Stelle dir eine API als Kellner in einem Restaurant vor, du sitzt an einem Tisch mit einer Auswahl an Menüoptionen und die Küche des Restaurants ist der Teil des Systems, welcher deine Bestellung vorbereitet. Was fehlt ist die entscheidende Verbindung um deine Bestellung der Küche zu übermitteln und dein Essen an deinen Tisch zu bringen. Da kommt der Kellner (API) ins Spiel.
Der Kellner (API) ist der Bote, der deine Bestellung (Request) aufnimmt, diese der Küche (System) mitteilt und dir dann dein Essen bringt (Response).

Eigentlich sollte eine API nicht sprachspezifisch sein sondern eine Schnittstelle, welche unabhängig der verwendeten Sprache angesprochen werden kann.

Die Unterschiede zwischen Library & Framework
Die einfache Antwort ist, dass der entscheidende Unterschied zwischen einem Framework und der Bibliothek ist, "wer wen abruft".
Mit anderen Worten, in einem Framework ruft der Framework Code deinen Code auf und in einer Library ist es dein Code, der Aufrufe an die Library sendet.
Versuche dir das ganze in der gleichen Weise vorzustellen, wie du eine typische Server-Client-Beziehung betrachtest.
In einer typischen Server-Client-Beziehung stellt der Client eine Anfrage an den Server und der Server antwortet dem Client.

Beispiel Library
curl ist eine Library in PHP. Wenn du eine der curl Funktionen verwendest, ist es dein PHP Code, der eine Funktion der curl Library aufruft. Dies macht deinen Code zum "Abrufer" und die Library zum "Abgerufenen".

Beispiel Framework
Wenn du beispielsweise ein PHP Framework wie Symfony oder Laravel verwendest, wird diese Beziehung invertiert und nun ist es das Framework, welches deinen Code abruft, welchen du mithilfe des Frameworks geschrieben hast. Dabei wird ein Design verwendet welches allgemein als "Inversion der Kontrolle (Inversion of Control, kurz IoC)" bekannt ist.

Vor dem Aufkommen des Pattern und Architektur-Hypes nannte man diese Vorgehensweise auch das Hollywood-Prinzip.
Getreu dem Motto:
Don't call us, we'll call you!

Die Abrufer-Abgerufener-Beziehung (Caller-Callee-Relationship) wird also invertiert, wenn der Abrufer von dem Abgerufenen abhängt, um die Funktionalität oder das Verhalten des Programms zu definieren und der Abgerufene hängt vom Abrufer ab, um den Ablauf der Steuerung (Flow of Control) im Programm zu definieren.

Der eigentliche Unterschied zwischen Libraries und Frameworks liegt also in der Kontrolle.
Um genauer zu sein im Ablauf des Kontrollflusses.
Frameworks kontrollieren letztendlich den Flow deiner Anwendung und Libraries nicht.


Abschließendes
Ich hoffe, ich konnte euch nun ein wenig Klarheit im Dschungel der ewigen Terminologien schaffen.
Solltet ihr Anregungen zum Thema, wünsche für andere Erklärungen oder Tutorials haben, so zögert nicht und teilt mir diese mit. :smile:
 
  • Like
Reaktionen: GasGas und RiotSeb

Users who are viewing this thema