REST API (RESTful API)
Was ist eine RESTful API?
Eine RESTful API ist ein spezifischer Architekturstil für Anwendungsprogrammierschnittstellen, der auf der Verwendung von HTTP-Anfragen basiert. Dieser Ansatz ermöglicht einen effizienten Zugriff auf Daten sowie deren Nutzung. Die RESTful API unterstützt verschiedene Datenoperationen, die durch die HTTP-Methoden GET, PUT, POST und DELETE repräsentiert werden. Jede dieser Methoden entspricht einer bestimmten Aktion: GET dient dem Lesen von Daten, PUT wird für das Aktualisieren von Ressourcen verwendet, POST ermöglicht das Erstellen neuer Datensätze, und DELETE wird eingesetzt, um Ressourcen zu entfernen. Durch diese Vielseitigkeit bietet die RESTful API eine flexible und standardisierte Möglichkeit, mit Daten und Ressourcen in verschiedenen Anwendungen zu interagieren.
Eine API ist ein Code, der es zwei Softwareprogrammen ermöglicht, miteinander zu kommunizieren. Der API-Entwurf legt fest, wie ein Entwickler ein Programm (den Client) schreiben muss, das die API nutzt, um Dienste von einer anderen Anwendung (dem Server) anzufordern. APIs sind zu einem wichtigen Mechanismus für die Interoperabilität von Softwaregeworden.
RESTful APIs werden auch als RESTful Web Services und REST APIs bezeichnet. Sie basieren auf dem Representational State Transfer, einem architektonischen Stil und Kommunikationsansatz, der häufig bei der Entwicklung von Webdiensten verwendet wird. Dieser Ansatz kann auch die Kommunikation zwischen anderen Anwendungstypen erleichtern.
Die REST-Technologie wird im Allgemeinen gegenüber anderen ähnlichen Technologien bevorzugt. Dies liegt daran, dass REST weniger Bandbreite verbraucht und somit effizienter in der Internetnutzung ist. RESTful APIs können auch mit gängigen Programmiersprachen wie PHP, JavaScript und Python erstellt werden.
REST-Browser werden als die Sprache des Internets angesehen. Cloud-Nutzer verwenden APIs, um den Zugang zu Webdiensten offenzulegen und zu organisieren. REST ist eine logische Wahl für die Erstellung von APIs, die den Benutzern die Möglichkeit bieten, sich flexibel mit Cloud-Diensten in verteilten Umgebungen zu verbinden, sie zu verwalten und mit ihnen zu interagieren. Webseiten wie Amazon, Google, LinkedIn und Twitter verwenden RESTful APIs.
Was sind die Hauptkomponenten einer RESTful API?
Eine REST-API basiert im Wesentlichen auf drei Hauptelementen:
- Client. Der Client ist der Softwarecode oder die Anwendung, die eine Ressource von einem Server anfordert.
- Server. Der Server ist der Softwarecode oder die Anwendung, der/die die Ressource steuert und auf Client-Anforderungen für die Ressource antwortet.
- Ressource. Bei der Ressource handelt es sich um Daten oder Inhalte wie Text, Video und Bilder, die der Server kontrolliert und als Antwort auf Client-Anfragen zur Verfügung stellt.
Um auf eine Ressource zuzugreifen, sendet der Client eine HTTP-Anfrage an den Server. Client-Anfragen bestehen aus vier Hauptkomponenten:
- HTTP-Methode. Hier wird angegeben, was mit der angegebenen Ressource geschehen soll. Die vier grundlegenden HTTP-Methoden werden als Verben bezeichnet. Sie sind POST, um eine neue Ressource zu erstellen, GET, um eine vorhandene Ressource abzurufen, PUT, um eine vorhandene Ressource zu aktualisieren oder zu ändern, und DELETE, um eine Ressource zu löschen. Wie die folgende Tabelle zeigt, entsprechen diese HTTP-Verben den Methoden oder Aktionen Create, Retrieve, Update und Delete, die als CRUD bezeichnet werden.
- Endpunkt. Der Endpunkt (Endpoint) zeigt an, wo sich die Ressource befindet. Er enthält normalerweise einen Uniform Resource Identifier (URI). Wenn der Zugriff auf die Ressource über das Internet erfolgt, kann der URI eine URL sein, die eine Webadresse für die Ressource angibt.
- Kopfzeile. Ein Header enthält die Details, die für die Ausführung des Aufrufs und die Bearbeitung der Antwort erforderlich sind. Ein Anfrage-Header kann Authentifizierungsdaten, einen Verschlüsselungsschlüssel, weitere Details über den Serverstandort oder Zugangsinformationen und Details über das gewünschte Datenformat für die Antwort enthalten.
- Body. Der Body enthält relevante Informationen zum oder vom Server. So kann ein Body beispielsweise die neuen Daten enthalten, die dem Server durch eine POST- oder PUT-Methode hinzugefügt werden sollen.
HTTP Verb | CRUD Action |
POST | Create |
GET | Read |
PUT | Update |
PATCH | Update |
DELETE | Delete |
Die Serverseite, auf der die API gehostet wird, verarbeitet den Aufruf und erstellt eine Antwort. Wenn Daten angefordert werden, sendet der Server eine maschinenlesbare Darstellung der angeforderten Daten, die der Client dann verarbeitet. Zu den Antwortdetails gehören in der Regel alle Informationen, die zur Interpretation der Antwort erforderlich sind, zum Beispiel ob die Daten im XML-Format (Extensible Markup Language), JSON-Format (JavaScript Object Notation) oder im reinen Textformat vorliegen. Der Server liefert zusätzliche Daten wie Fehlercodes und Zeitstempel oder andere Anweisungen für den Client.
Kurz gesagt: Aufrufe und Antworten sind selbstbeschreibend. Das bedeutet, dass Aufrufe und Antworten Informationen darüber enthalten, wie sie zu verarbeiten und zu interpretieren sind.
Die Funktionsweise einer RESTful APIs
Eine RESTful API zerlegt eine Transaktion in eine Reihe kleiner Module. Jedes Modul befasst sich mit einem zugrunde liegenden Teil der Transaktion. Diese Modularität gibt Entwicklern Flexibilität, aber es kann eine Herausforderung sein, eine REST-API von Grund auf zu entwerfen. Mehrere Unternehmen, darunter Amazon S3, Cloud Data Management Interface und OpenStack Swift, stellen Entwicklern entsprechende Modelle zur Verfügung.
Eine RESTful API verwendet Befehle, um Ressourcen abzurufen. Der Zustand einer Ressource zu einem bestimmten Zeitpunkt wird als Ressourcendarstellung bezeichnet. Eine RESTful API verwendet bestehende HTTP-Methoden, die im Protokoll RFC 2616 definiert sind, wie GET, PUT, POST und DELETE.
Bei REST sind die vernetzten Komponenten eine Ressource, auf die der Benutzer Zugriff verlangt. Dies ist wie eine Blackbox mit unklaren Implementierungsdetails. Alle Aufrufe sind zustandslos; der RESTful-Dienst kann zwischen den einzelnen Ausführungen nichts aufbewahren.
Die REST-API unterstützt folgende Datenformate: application/json, application/xml, application/x-web+xml, application/x-www-form-urlencoded und multipart/form-data.
Wie wird eine RESTful-API verwendet?
Da die Aufrufe zustandslos (stateless) sind, ist REST in Cloud-Anwendungen nützlich. Zustandslose (stateless) Komponenten können frei neu eingesetzt, erneut gesendet oder erneut versucht werden, wenn etwas fehlschlägt, und sie bieten eine erhebliche Skalierbarkeit, um Änderungen der Arbeitslast auszugleichen.
Dieser Ansatz funktioniert, weil jede Anfrage an eine beliebige Instanz einer Komponente gerichtet werden kann. Nichts, was die nächste Transaktion wissen muss, wird gespeichert. Dies macht die Verwendung von REST APIs für Webanwendungen vorteilhaft.
Das RESTful-Modell ist bei Cloud-Diensten hilfreich, weil die Bindung an einen Dienst über eine API eine Frage der Kontrolle darüber ist, wie die URL entschlüsselt wird. Cloud Computing und Microservices werden mit ziemlicher Sicherheit dazu führen, dass das RESTful-API-Design in Zukunft die Regel sein wird.
RESTful APIs werden häufig in mobilen und webbasierten Anwendungen verwendet, um über das Internet auf Daten in entfernten Systemen zuzugreifen und diese zu ändern. Es gibt unzählige Beispiele für Anwendungsfälle, aber die folgenden vier gehören zu den beliebtesten:
- Mobilität. Mobile Anwendungen wie Lyft und Uber verwenden REST APIs, um auf Karten zuzugreifen und Fahrten zu planen.
- Bankwesen. Diese Anwendungen nutzen REST APIs, um auf Kontodaten zuzugreifen und Transaktionen zu unterstützen.
- Streaming-Dienste. Spotify, Netflix und andere Streaming-Dienste verwenden REST APIs für den Zugriff auf Medien von entfernten Servern.
- Soziale Medien. Dienste wie X und Facebook verwenden REST APIs zum Erstellen und Verwalten von Beiträgen sowie zur Integration mit anderen Anwendungen.
Design und Begrenzungen in der Architektur
Dr. Roy Fielding, Senior Principal Scientist bei Adobe, definierte in seiner Dissertation aus dem Jahr 2000 das Design einer RESTful API als einen Webdienst, der die folgenden sechs Einschränkungen der REST-Architektur beachtet:
- Eine einheitliche Schnittstelle. Die Ressourcen sollten durch eine einzige URL eindeutig identifizierbar sein. Die Manipulation einer Ressource sollte nur über die Netzwerkprotokollmethoden DELETE, PUT und GET mit HTTP erfolgen.
- Client-Server-basiert. Die Abgrenzung zwischen Client und Server sollte klar sein. Die Benutzeroberfläche und das Sammeln von Anfragen sind die Domäne des Clients. Datenzugriff, Workload-Management und Sicherheit sind die Domäne des Servers. Durch diese lose Kopplung von Client und Server kann jeder unabhängig vom anderen entwickelt und verbessert werden.
- Zustandslose Operationen. Alle Client-Server-Operationen müssen zustandslos sein. Jede erforderliche Zustandsverwaltung sollte auf dem Client und nicht auf dem Server stattfinden.
- RESTful-Ressourcen-Caching. Alle Ressourcen sollten eine Zwischenspeicherung ermöglichen, es sei denn, dies ist nicht möglich.
- Mehrschichtiges System. REST ermöglicht eine Architektur, die aus mehreren Schichten von Servern besteht.
- Code auf Anfrage. Normalerweise sendet ein Server statische Darstellungen von Ressourcen in Form von XML oder JSON zurück. Bei Bedarf können die Server jedoch auch ausführbaren Code an den Client senden.
Was sind die Vorteile eines RESTful API?
REST APIs erfreuen sich aufgrund der zahlreichen Vorteile, die sie Entwicklern und Unternehmen bieten, großer Beliebtheit:
- Einfachheit. REST APIs verwenden gängige HTTP-Methoden, darunter GET-, PUT-, POST- und DELETE-Anfragen, wodurch sie einfach zu entwerfen, zu implementieren und zu verwenden sind.
- Unabhängigkeit. Entwickler profitieren von der Plattformunabhängigkeit, da sie zur Erstellung von REST APIs nahezu jede Programmiersprache verwenden können. Sie funktionieren mit verschiedenen Client-Geräten, zum Beispiel herkömmlichen Webbrowsern, mobilen Geräten und Internet-of-Things-Geräten.
- Flexibel. REST APIs unterstützen viele verschiedene Datenformate, darunter JSON, XML und einfachen Text. Entwickler können das Datenformat wählen, das am besten zu den Anforderungen des Clients und den verfügbaren serverseitigen Daten passt.
- Skalierbar. Die zustandslose Natur von REST APIs unterstützt die horizontale Skalierung, bei der viele API-Aufrufe parallel ausgeführt werden, um erhebliche API-Aufruflasten zu bewältigen.
- Cache-fähig. REST APIs unterstützen die Zwischenspeicherung, so dass Daten im lokalen Speicher abgelegt werden können. Dieser Ansatz kann die serverseitige Antwortzeit verkürzen und so die API-Leistung verbessern. Es kann sogar dazu führen, dass ein API-Aufruf überflüssig wird, wenn die erforderlichen Daten bereits auf dem Client durch einen früheren Aufruf vorhanden sind.
- Sicher. REST APIs können Aufrufe und Datenaustausch mit Open Authorization (OAuth) Authentifizierung und Secure Sockets Layer/Transport Layer Security Verschlüsselung sichern.
- Kompatibel. Durch die korrekte Verwendung der Versionskontrolle können Entwickler APIs wie jede andere sich entwickelnde Software behandeln, indem sie im Laufe der Zeit neue Funktionen hinzufügen und gleichzeitig die Abwärtskompatibilität und die Unterstützung von Legacy-Funktionen für bestehende Clients gewährleisten.
Herausforderungen beim Einsatz eines REST API
REST APIs sind kein Allheilmittel. Einige Konzepte, die eine Herausforderung darstellen können, sind die folgenden:
- Endpunkt-Konsistenz. Um konsistent zu sein, sollten die Endpunktpfade gemeinsamen Webstandards folgen, was schwierig zu handhaben sein kann.
- API-Versionierung. Endpunkt-URLs sollten nicht ungültig werden, wenn sie intern oder mit anderen Anwendungen verwendet werden.
- Lange Antwortzeiten und zu viele Daten. Die Menge der zurückgegebenen Ressourcen kann mit der Zeit wachsen, was die Lade- und Antwortzeiten erhöht.
- Navigationspfade und Orte für Benutzereingaben. Da REST-URL-Pfade für Eingabeparameter verwendet, kann die Bestimmung von URL-Bereichen schwierig sein.
- Sicherheit. Es gibt viele Sicherheitsaspekte zu beachten, zum Beispiel die Verwendung von HTTPS, die Sperrung des Zugriffs von unbekannten IP-Adressen und Domänen, die Validierung von URLs, die Sperrung unerwartet großer Nutzdaten, die Überwachung und Protokollierung von Anfragen und die Untersuchung von Fehlern.
- Authentifizierung. Dies erfordert die Kenntnis und Verwendung gängiger Authentifizierungsmethoden wie HTTP-Basisauthentifizierung, die einen Base64-kodierten Benutzernamen und eine Kennwortzeichenfolge zulässt, API-Schlüssel, JSON-Web-Token und andere Zugriffstoken wie OAuth 2.0, das sich für die Zugriffskontrolle eignet.
- Anfragen und Daten. Anfragen können mehr Daten und Metadaten enthalten als erforderlich, oder es sind mehrere Anfragen erforderlich, um alle Daten zu erhalten. APIs können entsprechend angepasst werden.
- Fehlercodes und -meldungen. Eine gängige Praxis ist die Verwendung von Standard-HTTP-Fehlercodes. Die Fehlerbehandlung ist möglicherweise nicht in der Lage zu unterscheiden, ob eine Antwort erfolgreich ist, abgesehen von der Analyse des Textkörpers oder der Überprüfung auf einen Fehler.
- API-Tests. Die Einrichtung und Durchführung dieses Prozesses kann langwierig sein. Jeder Teil des Prozesses kann eine Herausforderung darstellen. Das Testen kann auch über die Befehlszeile mit dem Client-URL-Dienstprogramm (cURL) erfolgen. Zu den Herausforderungen beim Testen gehören die anfängliche Einrichtung, Schemaaktualisierungen, Testparameterkombinationen, die Reihenfolge der API-Aufrufe, die Validierung der Testparameter und die Systemintegration.
curl -k https://172.31.0.1/restconf/ -u "cisco:cisco"
Bewährte Praktiken für REST-APIs
REST APIs sind spezielle Softwareanwendungen, die die Netzwerkkommunikation und die Ausführung bestimmter Aufgaben unterstützen sollen. Bei der Entwicklung und Verwaltung von APIs werden häufig dieselben Grundsätze und Richtlinien wie bei jedem anderen Softwareprojekt angewandt. Einige gängige REST-API-Best-Practices können jedoch die API-Designs und -Implementierungen verbessern:
- Verwendung von Substantiven in Endpunktpfaden. Wenn eine REST API bereits ein Verb, wie GET oder PUT, bei der Bildung einer Anfrage verwendet, sollte die Ressource, auf die zugegriffen wird, als Substantiv bezeichnet werden, wie zum Beispiel GET/datasource oder POST/articles. Dies macht die Anfrageerstellung für Designer intuitiver.
- Verwenden Sie ein gängiges Datenformat. JSON ist das gängigste und beliebteste Datenformat für REST-API-Nutzdaten. Es ist auch das Standardformat für gängige Programmiersprachen wie JavaScript.
- Verwenden Sie eine elegante Fehlerbehandlung. Stellen Sie sicher, dass die REST-API-Antworten eine vollständige Fehlerbehandlung enthalten und verwenden Sie standardmäßige HTTP-Antwortcodes, um den Fehlertyp anzugeben. Dadurch wird sichergestellt, dass Fehler die Client-Anwendung oder den Server nicht zum Absturz bringen und schnell verstanden und korrigiert werden können.
- Schränken Sie Datensätze ein. Verwenden Sie Filter-, Sortier- und andere Datenzugriffstechniken, um die Datenmenge, die an einen Client zurückgegeben werden kann, zu begrenzen oder zu reduzieren. Der Versuch, große Datensätze zu übertragen, kann die API beeinträchtigen oder zum Absturz bringen. Entwerfen Sie die API so, dass nur die angeforderten Mindestdaten angefordert und gesendet werden.
- Bewahren Sie die Sicherheit. Entwerfen Sie die REST API so, dass sowohl Authentifizierung als auch Verschlüsselung als Standardverfahren verwendet werden. Selbst bei öffentlichen APIs, die frei verfügbare Daten verwenden, sollten umfassende Sicherheitsvorkehrungen getroffen werden.
- Verwenden Sie Caching wo immer möglich. Die REST API unterstützt Caching auf der Server- und der Client-Seite. Die Verwendung von Cache auf der Serverseite beschleunigt die Antwortzeit des Servers, wenn eine häufige Anfrage eintrifft. Die Verwendung von Cache auf der Client-Seite bedeutet, dass die Daten bereits auf dem Client vorhanden sind und der API-Aufruf gar nicht erfolgen muss. In beiden Fällen verbessert sich die API-Leistung.
REST und SOAP im Vergleich
REST und Simple Object Access Protocol bieten unterschiedliche Methoden zum Aufrufen eines Webdienstes. REST ist ein Architekturstil, während SOAP ein Standard-Kommunikationsprotokoll für den XML-basierten Nachrichtenaustausch definiert. REST-Anwendungen können SOAP verwenden.
REST-basierte Webdienste sind zustandslos. Eine REST-basierte Implementierung ist im Vergleich zu SOAP einfach. Allerdings müssen die Benutzer den Kontext und den Inhalt, der weitergegeben wird, verstehen. Es gibt kein Standard-Regelwerk zur Beschreibung der REST-Webdienst-Schnittstelle. REST-Dienste sind nützlich für Geräte mit eingeschränktem Profil, wie zum Beispiel mobile Geräte, und lassen sich leicht in bestehende Websites integrieren.
SOAP erfordert weniger Plumbing-Code – den Low-Level-Infrastrukturcode, der die Hauptcodemodule miteinander verbindet – als das Design von REST-Diensten. Die Web Services Description Language beschreibt einen gemeinsamen Satz von Regeln zur Definition der Nachrichten, Bindungen, Operationen und Orte des Dienstes. SOAP-Webdienste sind für die asynchrone Verarbeitung und den Aufruf nützlich. Die strukturierte Formalität von SOAP eignet sich oft besser für komplexe Softwareintegrationen und Arbeitsabläufe auf Unternehmensebene, die das Design einer ähnlichen REST API überfordern könnten.
REST und SOAP sind beides nützliche und effektive Methoden für die Erstellung von APIs. Die Wahl zwischen ihnen hängt vom beabsichtigten Zweck und den Eigenschaften der API ab.
Entwicklungsgeschichte der RESTful-APIs
Vor der Einführung von REST verwendeten Entwickler SOAP, um APIs zu integrieren. Um einen Aufruf zu tätigen, schrieben die Entwickler von Hand ein XML-Dokument mit einem Remote Procedure Call im Hauptteil. Anschließend gaben sie den Endpunkt an und POSTeten ihren SOAP-Umschlag an den Endpunkt.
Im Jahr 2000 beschlossen Roy Fielding und eine Gruppe von Entwicklern, einen Standard zu schaffen, mit dem jeder Server mit jedem anderen Server kommunizieren kann. Er definierte REST. Die universellen Regeln von REST erleichtern den Entwicklern die Integration von Software.
Salesforce war das erste Unternehmen, das im Jahr 2000 eine RESTful API als Teil seines Internet-as-a-Service-Pakets verkaufte. Allerdings waren nur wenige Entwickler in der Lage, die komplizierte XML-API zu nutzen. Dann entwickelte eBay eine REST API, die den Markt auf jede Website ausdehnte, die auf ihre API zugreifen konnte. Dies erregte die Aufmerksamkeit eines anderen E-Commerce-Riesen, und Amazon kündigte seine API im Jahr 2002 an.
Flickr brachte seine RESTful API im August 2004 auf den Markt und ermöglichte es Bloggern, Bilder einfach in ihre Websites und Social Media Feeds einzubetten. Facebook und Twitter veröffentlichten ihre APIs im Jahr 2006 und beugten sich damit dem Druck von Entwicklern, die die Websites auswerteten und Frankenstein-APIs erstellten. Als Amazon Web Services 2006 zur Einführung der Cloud beitrug, konnten Entwickler mit der REST API von AWS innerhalb von Minuten auf Datenräume zugreifen. Die Nachfrage nach öffentlichen APIs eskalierte schnell.
Seitdem haben sich Entwickler RESTful APIs zu eigen gemacht und nutzen sie, um ihre Websites und Anwendungen um neue Funktionen zu erweitern. Heute gelten REST APIs als das Rückgrat des Internets.