Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Moderne Webanwendungen mit Node.js und Express.js

REST API entwerfen

Testen Sie unsere 2015 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Mit einer REST-Schnittstelle können Sie sowohl aus dem eigenen Webinterface als auch mit anderen Anwendungen dank RESTLER Ihren Express-Server ansprechen.

Transkript

Moderne Webanwendungen haben Schnittstellen. Die wohl häufigste Art von Schnittstelle, die man antrifft, ist die REST API. Dass die Umsetzung einer solchen REST API auf der node.js and Express Plattform ein Kinderspiel ist, beweise ich Ihnen nun im Laufe dieses Videos, mithilfe der Bibliothek "connect-rest", die meine express.js erweitert. Ich beginne dafür also mit der Installation des Pakets, "npm install connect-rest", und speichere die Abhängigkeit in meiner package.json Datei. Meine API-Endpunkte möchte ich wie ähnlich alle anderen Routen im Ordner "routes" definieren. Daher lege ich mir hier eine "api.js" Datei an. Zunächst einmal bin ich abhängig vom Paket "connect-rest". Allerdings möchte ich auf mein Datenmodel zurückgreifen, und Posts aus der MongoDB lesen können. Also definiere ich zusätzlich als Abhängigkeit das Datenmodel "posts". Um mir das Problem zu ersparen, alle Routen bei der Initialisierung von Express zu definieren, benutze ich nun einen kleinen Trick. Ich exportiere nun innerhalb dieses Moduls eine Funktion, die als Parameter "app" also express.js entgegennimmt. Bevor ich allerdings REST initialisiere, muss ich noch einige Optionen definieren. Im Objekt "options" gebe ich den Kontext an, das bedeutet, die Basisreferenz, unter der alle anderen Schnittstellen dargestellt werden. In dem Fall also direkt unter "/api". "domain" ist ein Kernkonzept von node.js. Damit ist es mir möglich, eine separate Problemdomäne für meine REST API zu spezifizieren. Sollte ich also wünschen, mit Fehlern umgehen zu wollen, könnte ich zu einem späteren Zeitpunkt "options.domain.on ('error" eine Funktion definieren, die alle Problemstellungen der REST API entgegennimmt, und separat behandelt. Als Nächstes initialisiere ich die REST-Schnittstelle als middleware innerhalb von Express. Mit dem Aufruf "app.use(rest.rester" und den vorher definierten Optionen wird die middleware initialisiert. Meinen ersten Endpunkt spezifiziere ich, indem ich sage "rest.get" als Methode, "posts", das bedeutet unter '/apis/posts', und ich erhalte die Möglichkeit, über eine Callback Funktion meine Antwort zurückzugeben. Da der Aufruf meiner Datenbank asynchron ist, bietet sich das besonders gut an. Um nun alle Posts abzufragen, nutze ich "posts.find", finde damit alle Posts. Sollte mich an dieser Stelle noch um eine Problemstelle kümmern, das heißt, wenn ein Fehler aufgetreten ist, möchte ich auch entsprechend über die Callback-Funktion einen Fehler zurückgeben, ansonsten nehme ich alle Posts entgegen, da es sich um eine multiple Anzahl von Posts handelt, benötige ich nun die Map-Funktion, um aus den jeweiligen mongoose-Objekten reine json-Objekte zu generieren. Das ist notwendig, da ich mongoose-Objekte nicht einfach über das Netzwerk schicken kann, da wesentlich mehr Inhalte drin sind als nur die reinen Attribute. Mein Vorgehen ist ähnlich beim Abrufen eines bestimmten Posts. Die Besonderheit hier ist, dass ich über ":id" einen variablen Parameter bestimme. den ich dann auf dem Request-Objekt unter "params.id" finde. So suche ich nun innerhalb der Posts nach einem Post mit einer bestimmten ID. Finde ich diesen nicht, gebe ich einen Fehler zurück, andernfalls mappe ich das Objekt auf ein json-Objekt. Zu guter Letzt die Schnittstelle, um einen Kommentar hinzuzufügen. Die Besonderheit hier ist, dass ich einen Post entgegen nehme, also Daten empfangen möchte. Zusätzlich nutze auch hier den ":id" Parameter, und die Kommentare unterhalb dieser ID mit dem Aufruf "add". Sollte ich den Eintrag nicht finden, ist mein Vorgehen ähnlich, ansonsten nehme ich den Post, füge hier den Kommentar hinzu, speichere und gebe den Status "ok" zurück. Zuletzt, aber nicht weniger wichtig, müssen die Routen aus der "api.js" nun innerhalb des Express Frameworks geladen werden. Ich suche mir nun einen entsprechenden Ort und füge meine API middleware mit dem besonderen Konstrukt ein über die require-Funktion "app" weiterzugeben. Den Server kann ich nun starten und meine API dort testen. Zum Testen nutze ich nun eine Chrome-App mit der Bezeichnung Postman. Hier habe ich bereits alle Endpunkte zum Testen spezifiziert. Ich rufe nun alle Posts ab, mit einem Aufruf von GET auf die entsprechende URL. Ich sehe nun, dass beide Posts zurückgeliefert werden. Als Nächstes möchte ich testen, dass nur der erste Beitrag zurückgeliefert wird. Siehe da, auch das funktioniert korrekt. Spannend wird es, ob ich auch tatsächlich Daten schreiben kann. Ich speichere nun den Kommentar "video2brain", bekomme die Statusmeldung "OK". Zur Sicherheit rufe ich noch einmal den Post 1 ab, und sehe nun, der Kommentar "video2brain" wurde hinzugefügt. Um sicherzustellen, dass sich die Änderungen auch auf mein Webinterface auswirken, gehe ich nun zu "localhost:3000/posts". Auch da haben sich die Änderungen der API sichtbar bemerkbar gemacht. In den letzten Minuten habe ich nun also eine einfache REST API gebaut. Diese eignet sich ideal, um eine Single Page Application zu bauen. Ich habe damit begonnen, Routen zu definieren, und diese Routen entsprechend mit Endpunkten an Mongoose angedockt, um dort Daten abzurufen und diese dann in ein json-übliches Format umzuwandeln. Für die Behandlung von API-Fehlern habe ich eine zusätzliche Problemdomain erstellt. So sind Fehlermeldungen der API komplett getrennt von Fehlermeldungen der Webanwendung selbst.

Moderne Webanwendungen mit Node.js und Express.js

Entwickeln Sie auf der Open-Source-Plattform Node.js kompakte und performante Webapplikationen und lernen Sie weiterführende Konzepte professioneller Webentwicklung kennen.

2 Std. 20 min (24 Videos)
REST-API
Jan T.
Im Großen und Ganzen nicht schlecht.

Nur sehr schade, dass bei den Beispielen, die man downloaden kann, die REST-API nicht dabei ist.

Bis dort hin hat auch alles einigermaßen geklappt. Aber folgendes funktioniert bei mir nicht:

var rest = require('connect-rest');

Obwohl ich das Modul ordnungsgemäß im Projekt installiert habe.
Fehlermeldung beim Start des Servers:

/pfad/zu/NodeExpress/node_modules/connect-rest/lib/Rest.js:73
for ( let key of Object.keys(source) )
^^^
SyntaxError: Unexpected strict mode reserved word
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/home/jan/workspace-kepler/NodeExpress/node_modules/connect-rest/lib/rest-services.js:7:12)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/home/jan/workspace-kepler/NodeExpress/routes/api.js:2:12)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
 
Exklusiv für Abo-Kunden
Erscheinungsdatum:23.03.2015

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!