Download (5Mb) - oops/ - Oldenburger Online-Publikations-Server
Download (5Mb) - oops/ - Oldenburger Online-Publikations-Server
Download (5Mb) - oops/ - Oldenburger Online-Publikations-Server
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
7.3 Backend 107<br />
Grape ermöglicht die Definition einer REST API durch die Bereitstellung eines “Micro-Frameworks”.<br />
Nachdem eine API definiert ist, kann diese Spezifikation auf einem Rack-kompatiblen Web <strong>Server</strong> installiert<br />
und den Client-Anwendungen angeboten werden. Grape unterstützt häufig verwendete Konzepte,<br />
die mit der Definition einer REST API verbunden sind, wie z.B. verschiedene Repräsentationen<br />
oder Formate: Die Anfrage an eine URI wie http://localhost/api/index.html liefert<br />
z.B. eine andere Antwort als eine Anfrage an die http://localhost/api/index.json)<br />
URI. Weiterhin unterstützt Grape die Versionierung einer API, durch die Einbettung der aktuellen Version<br />
in die URI (http://localhost/api/v8/etc) – alternativ können HTTP Headers oder<br />
Parameters verwendet werden.<br />
Weiterhin können verschiedene Namensräume (engl. namespace) definiert werden, in dem die beschriebenen<br />
Routen ihre Einzigartigkeit behalten – z.B. bei der Definition der Namensräume “foo”<br />
und “bar” werden die Anfragen “GET /foo/my-action” und “GET /bar/my-action” dem entsprechenden<br />
Namensraum weitergeleitet bzw. geroutet.<br />
Nachdem die benutzte technologische Grundlage für die Bereitstellung von REST APIs kurz eingeführt<br />
ist, werden in den kommenden Abschnitten Implementierungsdetails über die Umsetzung der<br />
Kommunikation zwischen dem Backend und dem Frontend gegeben.<br />
Definition einer Basis-API<br />
Ein erster Schritt für die Gewährleistung der Allgemeinheit im Fall der zu entwickelnden REST<br />
API ist die Definition einer Basis-API, die allgmein gültige Einstellungen feststellt. Diese Einstellungen<br />
werden per Ruby “Einbeziehung” (engl. inclusion, Ruby Schlüsselwort include) in die<br />
jeweiligen spezialisierten APIs integriert.<br />
Die genannten Einstellungen berühren REST- und HTTP-spezifische Themen, wie z.B. die Benutzung<br />
einer einheitlichen Versionnummer für API Methoden (s.o.), die Benutzung einer Default-<br />
Repräsentation oder die Feststellung eines Default Content-Type. Darüber hinaus werden in der<br />
Basis-API verschiedene Grape-spezifische Einstellungen ausgeführt wie die “stumme” Beseitigung<br />
eintretender Exceptions durch Logging (siehe auch 7.3.6).<br />
Die Basis-API enthält auch eine Basis-Funktionalität, die von erbenden APIs benutzt werden können:<br />
eine Methode zur Serialisierung (s.u.) und ggf. Komprimierung des übergebenen Inhalts. Weiterhin<br />
ist die Basis-API für erweiterte Konfigurationen zuständig, wie z.B. die Installation einer<br />
Rack-Middleware für die Implementierung des HMAC-basierten Sicherheitskonzeptes (siehe auch<br />
den kommenden, dedizierten Paragraph).<br />
Die genannten Einstellungen werden dank einem Feature von Ruby automatisch durchgeführt bei<br />
der Vererbung der Klasse BaseAPI von einer spezialisierten Klasse. Wie bei einer normalen Vererbung,<br />
bleiben die Einstellungen der Vater-Klasse bestehen, während die spezialisierte Klasse eine<br />
eigene REST API definiert. Weitere Details zur Spezialisierung werden in einem kommenden Abschnitt<br />
gegeben werden.<br />
Definition einer erweiterten API für die Einkapselung beliebiger Bestandteile des Datenmodells<br />
Die Spezialisierung der BaseAPI Klasse wird durch die Bestandteile des Datenmodells (siehe<br />
auch 7.2) ausgeprägt und ist in der Basis-Klasse BaseModelAPI zusammengefasst. Zum Beispiel