DataSnap-REST

Aus RAD Studio
Wechseln zu: Navigation, Suche

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.

Themen

Ü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

GET

URICclassName.URIMethodName

Utility.Storage

PUT

URIClassName.acceptURIMethodName

Utility.acceptStorage

POST

URIClassName.updateURIMethodName

Utility.updateStorage

DELETE

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:

  1. Wechseln Sie zu dem WebModule der DataSnap-REST-Serveranwendung.
  2. Wählen Sie die Komponente TDSHTTPWebDispatcher aus.
  3. Suchen Sie im Objektinspektor die Eigenschaft DSContext.
  4. Ändern Sie datasnap/ in mycontext/ (oder in eine andere Bezeichnung, die Sie benötigen). Vergessen Sie das abschließende /-Zeichen nicht.
  5. Suchen Sie im Objektinspektor die Eigenschaft WebDispatch, und erweitern Sie sie.
  6. Ändern Sie die Untereigenschaft PathInfo von datasnap* in mycontext*.
  7. Suchen Sie im Objektinspektor die Eigenschaft RESTContext.
  8. Ändern Sie rest/ in myrest/ (oder in eine andere Bezeichnung, die Sie benötigen). Vergessen Sie das abschließende /-Zeichen nicht.

UpdateRESTParameters.png

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 GET, PUT, POST oder DELETE

200

Ausführung erfolgreich

Die Antwort enthält die Ausgabeparameter {"result":[parameterValue[,parameterValue]*]}

201

Die PUT-Anforderung war erfolgreich

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

Beispiele