Softwareanwendungen haben unseren Lebensstil in vielerlei Hinsicht einfacher und besser gemacht. Wir verwenden sie fast täglich, und einige Menschen finden sich selbst dazu gezwungen, Anwendungen öfter zu verwenden als andere Menschen zu interagieren.
Aber wie interagieren Anwendungen untereinander? Na ja, das tun sie durch APIs – Application Programming Interfaces (Anwendungsprogrammierschnittstellen). In diesem Artikel lernst du, was APIs sind. Wir werden uns speziell auf Web APIs und ihre Design- und Entwicklung konzentrieren.
Was ist eine Web API?
Web APIs sind eine Art API, die für den Webgebrauch konzipiert wurde. Mit anderen Worten, Webanwendungen, Systeme und Dienste verwenden Web APIs, um Informationen über das Internet auszutauschen. Sie senden Anfragen und empfangen Antworten, typischerweise in Formaten wie JSON oder XML.
Web APIs spielen eine entscheidende Rolle in der modernen Softwareentwicklung aus den folgenden Gründen:
-
Kompatibilität: APIs sind technologieweitgehend, was bedeutet, dass sie unterschiedliche SoftwareSysteme unabhängig von der Technologiestruktur miteinander kommunizieren lassen. Dies ermöglicht Entwicklern, verschiedene Anwendungen problemlos zu integrieren.
-
Skalierbarkeit: Web APIs unterstützen modulare Entwicklung, was bedeutet, dass verschiedene Komponenten einer Anwendung unabhängig voneinander erstellt, debuggt und skaliert werden können. Dies verbessert die Skalierbarkeit des Systems erheblich.
-
Flexibilität und Erweiterbarkeit: Durch das Einhalten von Standardpraktiken und well-defined Regeln können Web-APIs helfen, Anwendungen zu erweitern. Sie sind auch flexibel genug, um Entwicklern zu erlauben, dynamische Anwendungen zu erstellen.
Verfahren zur Entwicklung von Web-APIs
Web-APIs können auf verschiedene Weise basierend auf den Anforderungen entwickelt werden. Hier sind einige allgemein verfolgten Verfahren:
-
REST – Representational State Transfer (REST) APIs verwenden das HTTP-Protokoll, um Operationen durchzuführen. Sie arbeiten in einem stateless Manier, was bedeutet, dass jeder Anfrage alle notwendigen Informationen für den Empfänger zu verarbeiten und zu reagieren enthalten sein muss.
-
SOAP – Simple Object Access Protocol verwendet XML, um Informationen in einer strukturierten Weise auszutauschen.
-
GraphQL – wird für die Abfrage und Bearbeitung von APIs verwendet.
-
gRPC – ein Remote Procedure Call Framework, das HTTP/2 für den Transport von Informationen nutzt.
In den folgenden Abschnitten werden wir uns mit dem Design und der Entwicklung von APIs beschäftigen, wobei wir uns auf REST-APIs als zentrales Protokoll konzentrieren werden.
Anforderungen und Ziele verstehen
In jedem Softwareentwicklungsprozess ist es entscheidend, die Anforderungen und den beabsichtigten Anwendungsfall zu verstehen, bevor man beginnt. Dies hilft Ihnen bei der Planung und Abschätzung der Kosten, des Zeitaufwands und anderer Ressourcen, die Sie für das Projekt benötigen.
Das Gleiche gilt für die Entwicklung von RESTful APIs. Sie müssen bestimmen, ob die Anwendungen Informationen zustandslos austauschen werden, ob die beteiligten Entitäten als Ressourcen dargestellt werden können und ob die Dienste flexibel genug sind, um mit verschiedenen Datenformaten zu arbeiten.
Definieren der Ressourcen und Endpunkte
REST-APIs drehen sich um Ressourcen, die Entitäten sind, die die Daten oder Objekte im System darstellen. Jede Ressource wird durch eine eindeutige URI, den Ressourcen-Identifikator, identifiziert. Auf diese Ressourcen kann über Endpunkte zugegriffen werden, die spezifische URLs sind, die Anfragen vom Client empfangen und verarbeiten.
Best Practices empfehlen die Verwendung von Substantiven für Ressourcen in den Endpunkten anstelle von Verben, die eine Operation an der Ressource anzeigen könnten.
Betrachten Sie das folgende Beispiel: https://api.example.com/products
Der Endpunkt folgt der bewährten Praxis, ein Substantiv für die Ressource zu verwenden (in diesem Fall Produkte
). Haben Sie bemerkt, dass ich die Pluralform – Produkte – verwendet habe? Es ist auch ratsam, Pluralformen zu verwenden, wenn Sie mit einer Sammlung von Objekten arbeiten.
Der folgende Endpunkt https://api.example.com/add-product
ist jedoch nicht empfehlenswert, da er ein Verb verwendet und versucht, eine Aktion an der Ressource zu beschreiben. Dieser Ansatz kann bei komplexeren Operationen kompliziert werden.
Ein weiterer wichtiger Aspekt der Standardkonvention zur Benennung von Endpunkten ist die Verwendung einer hierarchischen Struktur. Dies hilft, die Beziehung zwischen Ressourcen klar darzustellen.
Zum Beispiel: https://api.example.com/categories/{categoryId}/products/{productId}
.
Hier definieren wir einen Endpunkt, der eine klare Hierarchie zwischen den Ressourcen category
und product
aufrechterhält.
Verwendung von HTTP-Methoden und Statuscodes
In REST-APIs wird HTTP für die Kommunikation zwischen dem Client und dem Server verwendet. HTTP verfügt über Standardmethoden, die in erster Linie für die Durchführung von Operationen auf Ressourcen verwendet werden. Nachfolgend eine Liste dieser Methoden zusammen mit ihrem Zweck:
-
GET – Holt die Details der Ressource. Diese Details werden vom Server im Nachrichtentext der Antwort zurückgegeben.
-
POST – Erstellen einer neuen Ressource. Die Details der zu erstellenden Ressource werden im Nachrichtentext der Anfrage gesendet.
-
PUT – Erstellt oder aktualisiert eine Ressource, je nach ihrer Verfügbarkeit. Die Angaben zu der zu erstellenden oder zu aktualisierenden Ressource werden im Nachrichtentext der Anfrage übermittelt.
-
DELETE – Entfernen einer Ressource.
-
PATCH – Teilweise Aktualisierung einer Ressource. Die an der Ressource vorzunehmenden Änderungen werden im Nachrichtentext der Anfrage übermittelt.
Der empfohlene Ansatz für die Entwicklung einer gut definierten REST-API besteht darin, diese HTTP-Methoden korrekt für die Durchführung der entsprechenden CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) an der Ressource zu verwenden. Außerdem sollten Sie sicherstellen, dass die API dem Client mit einem geeigneten HTTP-Statuscode im Nachrichtentext der Antwort antwortet.
Statuscodes spiegeln das Endergebnis einer Anfrage wider. Im Folgenden sind einige der üblichen HTTP-Statuscodes aufgeführt, die Sie verwenden können:
-
200 OK
-
201 Created
-
204 Kein Inhalt
-
400 Schlechte Anfrage
-
401 Unauthorized
-
403 Forbidden
-
404 Not Found
-
500 Internal Server Error
-
503 Service Unavailable
-
504 Gateway Timeout
Verwende einen geeigneten HTTP-Statuscode, der die Ergebnisse der an Ihrem API-Endpunkt bearbeiteten Anfrage präzise widert. Sie können auch benutzerdefinierte HTTP-Statuscodes implementieren, um anschauliche Verhalten für Anwendungen zu beschreiben.
Versionsstrategien
Im Laufe der Zeit wird die von Ihnen entwickelte API weiterentwickelt und verändert. Hier zeichnet sich die Bedeutung von Versionsstrategien ab. Sie müssen sicherstellen, dass die bereits Ihre APIs verwendenden Klienten durch Ihre Änderungen nicht beeinträchtigt werden.
Der Aufbau mehrerer Versionen wird Ihre APIs rückwärts kompatibel halten und den Klienten erlauben, die bevorzugte Version der API basierend auf ihren Bedürfnissen zu verwenden. Ein Auszug aus diesem informativen Blog auf der Postman-Webseite erklärt, in welcher Situation die Versionierung Ihrer APIs ideal ist:
Sie sollten Ihre API immer dann versionieren, wenn Sie Änderungen vornehmen, die mit Veränderungen in der Codebasis der Konsumenten verbunden sind, um weiterhin mit der API arbeiten zu können. Diese Art von Änderung wird als „breakpoint change“ bezeichnet und kann an den Eingabe- und Ausgabestrukturen, der erfolgreichen und fehlerhaften Rückmeldung sowie den Sicherheitsmechanismen einer API vorgenommen werden.
API-Versionierung kann auf verschiedene Weise durchgeführt werden. Hier sind einige Methoden:
-
URI-Versionierung: Fügen Sie die Versionsnummer in den URL-Pfad ein. Zum Beispiel:
https://api.example.com/v1/products
. -
Query-Parameter-Versionierung: Geben Sie die Versionsnummer als Abfrageparameter in der URL an. Zum Beispiel:
https://api.example.com/products?version=1
. -
Header-Versionierung: Fügen Sie die Versionsnummer in den HTTP-Headern des Requests ein. Zum Beispiel, indem Sie einen benutzerdefinierten Header wie
X-API-Version: 1
verwenden. -
Content Negotiation: Geben Sie die Version im
Accept
-Header der Anfrage an, oft unter Verwendung von Medientypen. Zum Beispiel:Accept: application/vnd.example.v1+json
. -
Embedded Versioning: Die Versionsnummer wird in den Medientyp der Antwort eingebettet. Zum Beispiel:
application/vnd.example.product-v1+json
.
Sicherheitsüberlegungen
Ein weiterer wichtiger Aspekt bei der Entwicklung einer API ist die Sicherheit. Hier sind einige wichtige Punkte, die man sich merken sollte:
-
Implementieren Sie HTTPS, um die zwischen Client und Server ausgetauschten Informationen zu verschlüsseln.
-
Implementieren Sie Authentifizierung und Autorisierung, um sicherzustellen, dass nur Benutzer mit den richtigen Berechtigungen Operationen an den Ressourcen durchführen können. Zu den gängigen Methoden gehören Basic-Authentifizierung, Bearer- oder Token-Authentifizierung, JWT und OAuth 2.0. Implementieren Sie außerdem eine rollenbasierte Zugriffskontrolle, um den Ressourcenzugriff zu verwalten.
-
Implementieren Sie Eingabenvalidierung und Sanifizierung, um Angriffe wie SQL-Injection und Cross-Site Scripting (XSS) zu vermeiden.
-
Implementieren Sie Rate-Limiting und Throttling, um die Anzahl der Anfragen, die ein Client innerhalb eines bestimmten Zeitraums an den Server senden kann, zu kontrollieren. Dies hilft dabei, eine übermäßige Belastung des Servers zu vermeiden.
Dokumentation
Ein wichtiger, jedoch oft vernachlässigter Aspekt der API-Entwicklung ist die Dokumentation. Es ist wichtig, Ihre API zu dokumentieren, damit die Benutzer ihre Funktionen und Anwendbarkeiten verstehen können.
Die Dokumentation muss umfassend, leicht verständlich und auf Standardpraktiken basierend sein. Behalten Sie hierfür Beispiele für Anfrage- und Antwortdaten, verwendete HTTP-Statuscodes und mehr. Sie können die Open API-Spezifikation befolgen, um Ihre RESTful-APIs zu beschreiben.
Sortierung, Filtern und Seitennavigationstrategien
Die API, die du entwickelst, kann Performanceprobleme verursachen, wenn sie zu viele Datensätze zurückgibt. Es ist ineffizient, große Datenmengen zu laden und anschließend zu sortieren oder zu filtern.
Um dies zu beheben, solltest du die Sortierung und Filterung von Datensätzen aktivieren. Du solltest auch die Paginierung implementieren, um die Anzahl der abgerufenen Datensätze zu brechen und eine Obergrenze festzulegen, um eine einfache Navigation und Verarbeitung zu ermöglichen.
Nutzung, Protokollierung und Statusüberwachung
Es ist eine gute Idee, deine API-Anfragen und -Antworten zu protokollieren, um beim Debuggen zu helfen. Die Überwachung der API-Nutzung hilft dir, das allgemeine Verhalten und die Leistung der Anwendung zu verstehen. Regelmäßige Gesundheitsüberprüfungen kannst du notwendige Schritte einleiten, falls es zu Problemen kommt. Alle diese Schritte machen die API robuster und zuverlässiger.
Fazit
APIs, insbesondere Web-APIs, sind für Softwareanwendungen unerlässlich, um über das Internet zu kommunizieren.
Dieser Artikel erklärte, was Web-APIs sind, warum sie wichtig sind und verschiedene Ansätze für deren Entwicklung, insbesondere REST-APIs. Du hast auch erfahren, wie Themen wie die Definition von Ressourcen und Endpunkten, die Verwendung Standard-HTTP-Methoden und Statuscodes, Versionsstrategien, Sicherheitsaspekte, Dokumentation und weitere Themen behandelt wurden.
Wenn du diesen Artikel interessant gefunden hast, kannst du dir gerne meine anderen Artikel auf freeCodeCamp anschauen und mit mir auf LinkedIn verbinden.
Source:
https://www.freecodecamp.org/news/how-to-design-and-develop-web-apis-essential-guidelines/