REST Architectural Constraints

REST steht für Representational State Transfer, ein Begriff, der von Roy Fielding im Jahr 2000 geprägt wurde. Es ist ein Architekturstil zum Entwerfen lose gekoppelter Anwendungen über HTTP, der häufig bei der Entwicklung von Webdiensten verwendet wird. REST erzwingt keine Regel darüber, wie es auf niedrigerer Ebene implementiert werden soll, sondern legt nur Designrichtlinien auf hoher Ebene fest und lässt Sie an Ihre eigene Implementierung denken.

In meiner letzten Anstellung habe ich zwei gute Jahre lang RESTful APIs für ein großes Telekommunikationsunternehmen entwickelt. In diesem Beitrag werde ich meine Gedanken neben Standard-Design-Praktiken teilen. Sie können mir in einigen Punkten nicht zustimmen, und das ist völlig in Ordnung. Ich werde glücklich sein, alles von Ihnen mit einem offenen Geist zu diskutieren.

Lassen Sie uns mit Standard-Design-spezifischen Sachen beginnen, um zu klären, was ‚Roy Fielding‘ will, dass wir bauen. Dann werden wir meine Gedanken besprechen, die sich mehr auf feinere Punkte beziehen, während Sie Ihre RESTful-APIs entwerfen.

Architektonische Einschränkungen

REST definiert 6 architektonische Einschränkungen, die jeden Webdienst zu einer echten RESTful–API machen.

  1. Einheitliche Schnittstelle
  2. Client-Server
  3. Zustandslos
  4. Cachefähig
  5. Schichtsystem
  6. Code auf Anfrage (optional)

Einheitliche Schnittstelle

Da der Name der Einschränkung selbst zutrifft, MÜSSEN Sie die APIs-Schnittstelle für Ressourcen innerhalb des Systems festlegen, die API-Verbrauchern ausgesetzt sind und religiös folgen. Eine Ressource im System sollte nur einen logischen URI haben, und dies sollte eine Möglichkeit bieten, verwandte oder zusätzliche Daten abzurufen. Es ist immer besser, eine Ressource mit einer Webseite zu synonymisieren.

Jede einzelne Ressource sollte nicht zu groß sein und alles in seiner Darstellung enthalten. Wann immer relevant, sollte eine Ressource Links (HATEOAS) enthalten, die auf relative URIs verweisen, um verwandte Informationen abzurufen.

Außerdem sollten die Ressourcendarstellungen im gesamten System bestimmten Richtlinien wie Namenskonventionen, Linkformaten oder Datenformaten (XML oder/und JSON) folgen.

Alle Ressourcen sollten über einen gemeinsamen Ansatz wie HTTP GET zugänglich sein und in ähnlicher Weise mit einem konsistenten Ansatz geändert werden.

Sobald ein Entwickler mit einer Ihrer APIs vertraut ist, sollte er in der Lage sein, einen ähnlichen Ansatz für andere APIs zu verfolgen.

Client–Server

Diese Einschränkung bedeutet im Wesentlichen, dass sich Client-Anwendung und Server-Anwendung getrennt voneinander entwickeln können, ohne voneinander abhängig zu sein. Ein Client sollte nur Ressourcen-URIs kennen, und das ist alles. Heute ist dies Standard in der Webentwicklung, daher ist von Ihrer Seite nichts Besonderes erforderlich. Halten Sie es einfach.

Server und Clients können auch unabhängig voneinander ausgetauscht und weiterentwickelt werden, sofern die Schnittstelle zwischen ihnen nicht verändert wird.

Stateless

Roy Fielding wurde von HTTP inspiriert, daher spiegelt es sich in dieser Einschränkung wider. Machen Sie alle Client-Server-Interaktionen zustandslos. Der Server speichert nichts über die letzte HTTP-Anfrage, die der Client gestellt hat. Es wird jede Anfrage als neu behandeln. Keine Sitzung, keine Geschichte.

Wenn die Clientanwendung eine statusbehaftete Anwendung für den Endbenutzer sein muss, bei der sich der Benutzer einmal anmeldet und danach andere autorisierte Vorgänge ausführt, sollte jede Anforderung vom Client alle Informationen enthalten, die zur Bearbeitung der Anforderung erforderlich sind – einschließlich Authentifizierungs– und Autorisierungsdetails.

Zwischen den Anforderungen darf kein Clientkontext auf dem Server gespeichert werden. Der Client ist für die Verwaltung des Status der Anwendung verantwortlich.

Cachefähig

In der heutigen Welt ist das Caching von Daten und Antworten von größter Bedeutung, wo immer sie anwendbar / möglich sind. Die Webseite, die Sie hier lesen, ist auch eine zwischengespeicherte Version der HTML-Seite. Das Caching bringt eine Leistungsverbesserung für die Clientseite und einen besseren Skalierbarkeitsspielraum für einen Server, da die Last reduziert wurde.

In REST wird das Caching gegebenenfalls auf Ressourcen angewendet, und diese Ressourcen MÜSSEN sich dann als cachefähig deklarieren. Caching kann auf der Server- oder Clientseite implementiert werden.

Durch gut verwaltetes Caching werden einige Client-Server-Interaktionen teilweise oder vollständig eliminiert, wodurch Skalierbarkeit und Leistung weiter verbessert werden.

Mehrschichtiges System

Mit REST können Sie eine mehrschichtige Systemarchitektur verwenden, in der Sie die APIs auf Server A bereitstellen, Daten auf Server B speichern und Anforderungen auf Server C authentifizieren. Ein Client kann normalerweise nicht erkennen, ob er direkt mit dem Endserver oder einem Vermittler auf dem Weg verbunden ist.

Code auf Anfrage (optional)

Nun, diese Einschränkung ist optional. Meistens senden Sie die statischen Darstellungen von Ressourcen in Form von XML oder JSON. Aber wenn Sie müssen, können Sie return executable code , um einen Teil Ihrer Anwendung zu unterstützen, z. B. können Clients Ihre API aufrufen, um einen UI-Widget-Rendering-Code zu erhalten. Es ist erlaubt.

Alle oben genannten Einschränkungen helfen Ihnen beim Erstellen einer wirklich RESTful-API, und Sie sollten ihnen folgen. Dennoch können Sie manchmal feststellen, dass Sie eine oder zwei Einschränkungen verletzen. Mach dir keine Sorgen; Sie machen immer noch eine RESTful API – aber nicht „wirklich RESTful.“

Beachten Sie, dass alle oben genannten Einschränkungen am engsten mit WWW (dem Web) zusammenhängen. Mit RESTful-APIs können Sie mit Ihren Webdiensten dasselbe tun, was Sie mit Webseiten tun.

War dieser Artikel hilfreich?

Ja
Nein

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

More: