DataSnap-REST
Nach oben zu DataSnap-Anwendungen entwickeln
Representational State Transfer (REST) ist die Client/Serverarchitektur, die im World Wide Web verwendet wird. Die Übereinstimmung mit REST-Bedingungen wird als RESTful bezeichnet. Ein RESTful Webdienst wird unter Verwendung von HTTP (Hypertext Transfer Protocol) und den Prinzipien von REST implementiert.
Inhaltsverzeichnis
Themen
- Anforderungsfilter
- JavaScript-REST-Proxy
- Zwischenspeicherung von DBX-Parametern
- Codeintensive REST-Callback-Funktionen
- REST-Clientbibliothek
- Authentifizierung mit einem JavaScript-Client
- JavaScript-Client-Sitzungen
- DataSnap-REST-Nachrichtenprotokoll
Überblick zu DataSnap-REST
Das REST-Protokoll setzt voraus, dass der Server vier Anforderungstypen bedienen kann: GET
, POST
, PUT
und DELETE
. Diese Vorgänge repräsentieren die Datenoperationen Abrufen, Aktualisieren, Einfügen und Löschen. Sie werden über ein Zuordnungsprotokoll an die Servermethoden angepasst. REST setzt voraus, dass jede Servermethode als eine der oben genannten Operationen über einen Verteilungsmechanismus aufgerufen werden kann, der eine Zuordnung zwischen dem Pfad des URI (Uniform Resource Identifier), dem Methodennamen und den Parametern impliziert.
Zuordnen von URIs
Der Server antwortet auf DataSnap-URIs. Die allgemeine HTTP-Anforderung hat das folgende Format:
http://my.site.com/datasnap/rest/URIClassName/URIMethodName[/inputParameter]*
Der Inhalt wird von POST
- und PUT
-Anforderungen akzeptiert und an Update- und Put-Anforderungen angepasst. Das Standardprotokoll ordnet den URI - abhängig vom Befehlstyp - verschiedenen Servermethoden zu.
Befehlstyp | Zuordnungsmuster | Beispiel |
---|---|---|
|
URICclassName.URIMethodName |
Utility.Storage |
|
URIClassName.acceptURIMethodName |
Utility.acceptStorage |
|
URIClassName.updateURIMethodName |
Utility.updateStorage |
|
URIClassName.cancelURIMethodName |
Utility.cancelStorage |
Abhängig vom Befehlstyp kann eine Anforderung, wie z.B. http://my.site.com/datasnap/rest/utility/storage
, einer der vier oben genannten Methoden zugeordnet werden. Es wird vorausgesetzt, dass eine über eine GET
-Anforderung zugeordnete Methode das Objekt oder eine Kollektion von Objekten auf der Basis der Eingabeparameter zurückgibt.
Beispielsweise entspricht eine Servermethode namens Utility.Storage(Key: String): TJSONValue;
dem GET
-Befehl:
http://my.site.com/datasnap/rest/utility/storage/test
.
Eine POST
-Anforderung ruft Utility.UpdateStorage(Key: String; Data: TJSONValue);
auf. Der Inhalt der Anforderung wird den Daten der Eingabeparameter und das Suffix des URI dem Schlüssel zugeordnet.
Eine PUT
-Anforderung ruft Utility.AcceptStorage(Key: String; Data: TJSONValue);
auf. Es wird davon ausgegangen, dass die Methode den Datenparameter in den Speicherbereich unter dem angegebenen Schlüssel einfügt. Der Inhalt der Anforderung wird dem zweiten Eingabeparameter zugeordnet.
Eine DELETE
-Anforderung ruft Utility.CancelStorage(Key: String);
auf, was das Objekt aus dem Speicherbereich mit dem angegebenen Schlüssel entfernen soll.
Das Zuordnungsmuster kann aufgehoben werden. Der Benutzer kann die Zuordnung für jeden Typ auf Basis der Parameter "Klassenname" und "Methodenname" neu definieren.
Anpassen des URL für REST-Anforderungen
Sie können für ein REST-Anforderung Teile des URL schnell anpassen. Beispielsweise können Sie den DataSnap-Standardkontext von datasnap/ in mycontext/ ändern. Auch den REST-Kontext können Sie ändern, beispielweise von rest/ in myrest/. Gehen Sie dazu folgendermaßen vor:
- Wechseln Sie zu dem WebModule der DataSnap-REST-Serveranwendung.
- Wählen Sie die Komponente TDSHTTPWebDispatcher aus.
- Suchen Sie im Objektinspektor die Eigenschaft DSContext.
- Ändern Sie datasnap/ in mycontext/ (oder in eine andere Bezeichnung, die Sie benötigen). Vergessen Sie das abschließende /-Zeichen nicht.
- Suchen Sie im Objektinspektor die Eigenschaft WebDispatch, und erweitern Sie sie.
- Ändern Sie die Untereigenschaft PathInfo von datasnap* in mycontext*.
- Suchen Sie im Objektinspektor die Eigenschaft RESTContext.
- Ändern Sie rest/ in myrest/ (oder in eine andere Bezeichnung, die Sie benötigen). Vergessen Sie das abschließende /-Zeichen nicht.
Durch diese Änderungen wird der DataSnap-Server dazu veranlasst, Anforderungen zu verarbeiten, die mit
/mycontext/myrest
beginnen anstatt mit
/datasnap/rest
Darüber hinaus sind einige Änderungen erforderlich, damit Clients den korrekten URL verwenden. Diese Änderungen beziehen sich auf die Datei js\connection.js. Sie müssen setConnection auf Folgendes aktualisieren:
function setConnection(host, port, urlPath)
{
connectionInfo = {"host":host,"port":port,"authentication":null,"pathPrefix":urlPath};
connectionInfo.dscontext = 'mycontext';
connectionInfo.restcontext = 'myrest';
}
Antwortnummern
Abhängig vom URI, den bereitgestellten Methoden und den Ausführungsergebnissen können die folgenden Codes zurückgegeben werden:
Code | Grund | Beispiel |
---|---|---|
404 |
Das Schlüsselwort DataSnap fehlt im URI |
http://my.site.com/rest |
501 |
Das Schlüsselwort REST (oder ein anderes Protokoll) fehlt |
http://my.site.com/datasnap/x/y/z |
501 |
Befehlstyp nicht erkannt |
Andere Befehle als |
200 |
Ausführung erfolgreich |
Die Antwort enthält die Ausgabeparameter {"result":[parameterValue[,parameterValue]*]} |
201 |
Die |
Die Antwort enthält die Ausgabeparameter {"result":[parameterValue[,parameterValue]*]} |
500 |
Die Ausführung der Methode schlug fehl, der Grund ist in der Antwort enthalten |
- |
Bereitstellung einer Servermethode
Nachdem die Serverklasse beim DataSnap-Server registriert ist, müssen alle Methoden über HTTP aufrufbar sein, sofern die Signatur dies zulässt. Wenn keine benutzerdefinierte Zuordnung angegeben ist, müssen die Servermethoden mit der oben genannten Namenskonvention übereinstimmen, um für HTTP REST-Anforderungen verfügbar zu sein.
Die Parameter werden aus dem URI sofort nach dem Servermethodennamen zugeordnet. Wenn die Anzahl der Parameter nicht übereinstimmt, oder es sich nicht um Eingabe- oder Eingabe-/Ausgabeparameter handelt, wird ein Fehler zurückgegeben.
Siehe auch
- REST-Clientbibliothek
- Experte für DataSnap-REST-Anwendungen
- Verbinden des Clients mit dem DataSnap-Server
- RESTful Web Services (EN)
- Building Web Services the REST Way (EN)
Beispiele
- REST Surf Spot Finder (Beispiel) (Delphi)
- REST Surf Spot Finder (Beispiel) (C++)