Übersicht über RAD Server-Ressourcen
Nach oben zu Erweitern der RAD Server Engine
Eine RAD Server-Ressource ist eine Erweiterung der API der RAD Server Engine (EMS-Server).
Wenn Sie eine RAD Server-Ressource in die RAD Server Engine laden, registriert die RAD Server Engine sie und stellt alle ihre Endpunkte bereit. RAD Server-Anwendungen können mit einer TBackendEndpoint-Komponente auf die Endpunkte Ihrer RAD Server-Ressource zugreifen.
- Hinweis: Erstellen Sie zunächst ein RAD Server-Package, in dem Sie RAD Server-Ressourcen definieren können.
Inhaltsverzeichnis
Definieren einer Ressourcenklasse
Eine Ressourcenklasse ist eine Klasse, die eine RAD Server-Ressource repräsentiert.
Deklarieren einer Ressourcenklasse
Sie können Ressourcenklassen wie reguläre Klassen deklarieren. Zum Beispiel:
TMyResource = class;
// .h
class TMyResource {};
Ressourcenklassen müssen mindestens einen Konstruktor haben, der einem der folgenden Punkte entspricht:
- Der Konstruktor akzeptiert keine Parameter.
- Der Konstruktor akzeptiert einen einzelnen Parameter mit dem Typ TComponent.
Ressourcennamen
Jede RAD Server-Ressource hat einen Ressourcennamen, der diese Ressource eindeutig bezeichnet. Wenn Sie auf Ihre Ressource aus einer RAD Server-Client-Anwendung zugreifen, müssen Sie in der Eigenschaft Resource Ihrer TBackendEndpoint-Komponente den Namen der Zielressource angeben.
Standardmäßig ist der Name der RAD Server-Ressource, die Ihre Klasse repräsentiert, der Name der Klasse ohne das Präfix "T" (falls vorhanden). Beispielsweise lautet der Name der Ressource der oben genannten Klasse "MyResource". Wenn Sie für Ihre RAD Server-Ressource einen anderen Namen verwenden möchten, können Sie ihn später anpassen.
Definieren von Endpunktmethoden
Nach der Definition einer Ressourcenklasse sollten Sie dieser Klasse mindestens eine Endpunktmethode hinzufügen.
Eine Endpunktmethode ist eine Methode, die API-Anforderungen an die Ressource behandelt, in der diese Methode definiert ist.
API-Anforderungen müssen eine Anforderungsmethode (z. B. "GET") und ein optionales Ressourcensuffix enthalten. Jede Endpunktmethode einer Ressourcenklasse muss eine aus Anforderungsmethode und Ressourcensuffix verarbeiten.
Wenn die RAD Server Engine eine Anforderung erhält, die eine Endpunktmethode verarbeiten kann:
- Führt die RAD Server Engine diese Endpunktmethode aus.
- Generiert die Endpunktmethode eine Antwort.
- Sendet die RAD Server Engine die generierte Antwort zurück an die Client-Anwendung, die die ursprüngliche Anforderung gesendet hat.
Deklarieren einer Endpunktmethode
Zum Deklarieren einer Endpunktmethode müssen Sie eine Methode in Ihrer Ressourcenklasse deklarieren, die die folgenden Bedingungen erfüllt:
- Sie ist mit der Sichtbarkeit public oder published deklariert.
- Ihr Name beginnt mit einem String, der dem Namen einer Anforderungsmethode entspricht:
Get
,Put
,Post
,Delete
oderPatch
. Andernfalls müssen Sie die Anforderungsmethode angeben.Get
,PutItem
undPostWhateverYouWant
sind alles gültige Namen für Endpunktmethoden. Sie können jede Schreibweise für dieses Präfix verwenden; z. B. sindGet
,get
undGET
gültige Präfixe für den Namen einer Endpunktmethode.
- Ihre Signatur hat keinen Rückgabewert und akzeptiert nur die folgenden drei Parameter in dieser Reihenfolge: TEndpointContext, TEndpointRequest und TEndpointResponse.
-
- Delphi:
procedure MethodName(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
-
- C++:
void MethodName(TEndpointContext* AContext, TEndpointRequest* ARequest, TEndpointResponse* AResponse);
Wenn eine Methode einer Ressourcenklasse nicht alle oben genannten Bedingungen erfüllt, ordnet die RAD Server Engine (EMS-Server) dieser Methode keinen API-Endpunkt zu.
Implementieren einer Endpunktmethode
Ihre Implementierung einer Endpunktmethode muss die empfangene Instanz von TEndpointResponse mit Daten, normalerweise mit JSON-Daten, füllen. Sie können mit der Methode SetValue der Eigenschaft Body von TEndpointResponse
die Antwort mit JSON-Daten füllen, oder Sie können mit SetBytes oder SetStream Rohdaten in den Antwortrumpf schreiben.
Unter Tutorial: Implementieren Ihrer ersten RAD Server-Ressource finden Sie einige einfache Beispiele dazu.
Anforderungsmethoden
Standardmäßig wird die Anforderungsmethode einer Endpunktmethode durch den Anfang des Endpunktmethodennamens bestimmt. Um einer Endpunktmethode eine andere Anforderungsmethode zuzuweisen, müssen Sie die Zuordnung der Endpunktmethode später anpassen.
Die RAD Server Engine-API unterstützt die folgenden Typen von Anforderungsmethoden:
Name | Beschreibung |
---|---|
GET |
Zum Abrufen von Daten. |
PUT |
Zum Erstellen eines neuen Elements und Abrufen seiner ID. |
POST |
Zum Ersetzen eines vorhandenen Elements durch neue Daten. |
PATCH |
Zum Aktualisieren der Daten eines vorhandenen Elements. |
DELETE |
Zum Löschen eines Elements. |
Ressourcensuffixe
Ein Ressourcensuffix ist ein String am Ende einer Endpunkt-URL, direkt nach dem Ressourcennamen (in Kleinbuchstaben). Wenn beispielsweise mit der URL http://example.com/ems/myresource/item/count auf einen Endpunkt zugegriffen wird und der Name der Ressource "MyResource" lautet, ist das Ressourcensuffix dieses Endpunkts "item/count" (oder "/item/count").
Jede Endpunktmethode wird einem bestimmten Ressourcensuffix zugeordnet. Wenn Sie auf Ihre Ressource aus einer RAD Server-Client-Anwendung zugreifen, müssen Sie in der Eigenschaft ResourceSuffix Ihrer TBackendEndpoint-Komponente das Ressourcensuffix angeben.
Standardmäßig ist das Ressourcensuffix einer Endpunktmethode ein leerer String. Um einer Endpunktmethode ein anderes Ressourcensuffix zuzuweisen, müssen Sie die Zuordnung der Endpunktmethode später anpassen.
Ein Ressourcensuffix ist immer der relative Pfad zu der URL der Ressource selbst. Wenn Sie einer Endpunktmethode ein Ressourcensuffix zuweisen, das mit einem Schrägstrich (/) beginnt, ignoriert die RAD Server Engine diesen Schrägstrich. Beispielsweise sind "/item/count" und "item/count" gültige Ressourcensuffixe, die beide auf dieselbe Endpunkt-URL, z. B. http://example.com/ems/myresource/item/count, zeigen.
Spezielle Segmente für Ressourcensuffixe
Ein Segment ist ein String, der andere Zeichen (keine Schrägstriche) enthält. Ein Ressourcensuffix kann aus mehreren durch Schrägstriche getrennten Segmenten bestehen. Zum Beispiel enthält "item/count" zwei Segmente, "item" und "count".
Ressourcensuffixe unterstützen die folgenden speziellen Segmente:
Segment | Beschreibung |
---|---|
|
Entspricht jedem Segment. Beispielsweise entspricht das Ressourcensuffix "*/count" den Segmenten "foo/count" und "bar/count". |
|
<Bezeichner> kann ein Bezeichner, wie z. B. "item" oder "key", sein.
Entspricht jedem Segment und speichert das übereinstimmende Segment in der Eigenschaft TEndpointRequest.Params mit Ihrem Bezeichner als Schlüssel und dem eigentlichen String aus der Anforderungs-URL als Wert.
Das Ressourcensuffix "{item}/bar" entspricht "foo/bar" und füllt die Eigenschaft TEndpointRequest.Params mit dem folgenden Paar: |
- Hinweis: Sie können diese speziellen Segmente nur als vollständige Segmente verwenden. In Ressourcensuffixen, wie "foo*/bar" oder "{foo}bar/count", interpretiert die RAD Server Engine "foo*" und "{foo}bar" als reguläre Strings, nicht als spezielle Segmente.
Namen von Endpunkten
Der Name eines Endpunkts ist der Anzeigestring, der diesen Endpunkt in der Benutzeroberfläche der RAD Server-Konsole repräsentiert.
Standardmäßig ist der Name eines Endpunkts, der eine Endpunktmethode repräsentiert, der Name dieser Methode. Wenn Sie für Ihren Endpunkt einen anderen Namen verwenden möchten, können Sie ihn später anpassen.
Endpunktnamen müssen innerhalb einer Ressource eindeutig sein. Wenn Sie denselben Endpunktnamen für zwei verschiedene Endpunktmethoden verwenden, hängt die RAD Server Engine an das Ende von wiederholten Endpunktnamen eine Zahl an, damit sie eindeutig sind. Wenn Sie beispielsweise bei zwei Endpunktmethoden die Zuordnung ändern, damit beide "MyEndpoint" als Endpunktnamen verwenden, behält die erste Endpunktmethode diesen Endpunktnamen bei, aber der Name der zweiten Endpunktmethode wird zu "MyEndpoint2".
Anpassen der Zuordnung Ihrer Ressourcen
Bevor Sie Ihre Ressourcenklassen bei der RAD Server Engine registrieren, können Sie ändern, wie Sie jede Ressourcenklasse und Endpunktmethode der RAD Server Engine-API zuordnen.
Sie können Ressourcennamen, Ressourcensuffixe, Endpunktnamen und Anforderungsmethoden ändern.
Um die Zuordnung einer Ressource anzupassen, können Sie für diese Ressource ein Ressourcenattributobjekt definieren und dieses Objekt beim Registrieren Ihrer Ressource verwenden. In Delphi können Sie alternativ die Zuordnung Ihrer Ressource mithilfe von Attributen ändern.
Definieren eines Ressourcenattributobjekts
Ein Ressourcenattributobjekt ist eine Instanz von TEMSResourceAttributes.
So passen Sie die Zuordnung einer Ressource mithilfe eines Ressourcenattributobjekts an:
- Erstellen Sie eine Instanz von
TEMSResourceAttributes
. - Füllen Sie die Eigenschaften Ihres Ressourcenattributobjekts mit den Zuordnungen aus, die Ihre Ressource verwenden soll.
- Übergeben Sie Ihr Objekt als zweiten Parameter von RegisterResource, wenn Sie Ihre Ressource registrieren.
Sie können mit den folgenden Eigenschaften von TEMSResourceAttributes
die Zuordnung Ihrer Ressource anpassen:
Eigenschaft | Beschreibung |
---|---|
Legt den Namen Ihrer Ressource fest. | |
Legt anhand des Namens einer Endpunktmethode das Ressourcensuffix dieser Endpunktmethode fest. | |
Legt anhand des Namens einer Endpunktmethode den Namen des Endpunkts fest, den die angegebene Endpunktmethode repräsentiert. | |
Legt anhand des Namens einer Endpunktmethode die Anforderungsmethode dieser Endpunktmethode fest. |
- Hinweis: Sie müssen nur die Zuordnungsdaten definieren, die Sie ändern möchten. Wenn Sie beispielsweise den Wert von ResourceName nicht ändern, verwendet die RAD Server Engine den Standardnamen Ihrer Ressource (der auf dem Namen Ihrer Ressourcenklasse basiert).
Zum Beispiel:
- Delphi:
// var MyResourceAttributes: TEMSResourceAttributes;
MyResourceAttributes.Create();
MyResourceAttributes.ResourceName := 'Resource';
MyResourceAttributes.ResourceSuffix['Get'] := '{item}';
MyResourceAttributes.EndPointName['Get'] := 'GetItem';
- C++:
std::auto_ptr<TEMSResourceAttributes> MyResourceAttributes(new TEMSResourceAttributes());
MyResourceAttributes->ResourceName = "Resource";
MyResourceAttributes->ResourceSuffix["Get"] = "{item}";
MyResourceAttributes->EndPointName["Get"] = "GetItem";
Anpassen der Zuordnung von Ressourcen mithilfe von Attributen (Delphi)
Um die Zuordnungsdaten Ihrer Ressourcenklassen und Endpunktmethoden in Delphi anzupassen, können Sie sie mit den folgenden Attributen mit Hinweisen versehen:
Member-Typ | Attribut | Beschreibung |
---|---|---|
Ressourcenklasse |
Legt den Namen Ihrer Ressource fest. | |
Endpunktmethode |
Legt das Ressourcensuffix der Endpunktmethode fest. | |
Legt den Namen des Endpunkts fest, der die Endpunktmethode repräsentiert. | ||
Legt die Anforderungsmethode der Endpunktmethode fest. |
[ResourceName('Resource')]
TMyResource = class
published
[ResourceSuffix('{item}')]
[EndpointName('GetItem')]
procedure Get(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
end;
Registrieren einer Ressource
Wenn Ihre Ressourcenklasse und deren Endpunktmethoden definiert sind, müssen Sie:
- Ihre Ressourcenklasse an TypeInfo übergeben, um die RTTI-Informationen Ihrer Ressourcenklasse abzurufen.
- Die RTTI-Informationen Ihrer Ressourcenklasse an die RAD Server Engine mit RegisterResource übergeben.
Sie sollten RegisterResource
für die Methode Register Ihres Package aufrufen.
Zum Beispiel:
- Delphi:
RegisterResource(TypeInfo(TMyResource));
- C++:
RegisterResource(__typeinfo(TMyResource));
Registrieren einer Ressource mit einem Ressourcenattributobjekt
Wenn Sie ein Ressourcenattributobjekt erstellt haben, um die Zuordnungsdaten Ihrer Ressourcenklasse und Ihrer Endpunktmethoden anzupassen, übergeben Sie Ihr Ressourcenattributobjekt an RegisterResource
als zweiten Parameter.
Zum Beispiel:
- Delphi:
RegisterResource(TypeInfo(TMyResource), MyResourceAttributes);
- C++:
RegisterResource(__typeinfo(TMyResource), MyResourceAttributes.release());
Siehe auch
- RAD Server-Client-Anwendung
- Tutorial: Implementieren Ihrer ersten RAD Server-Ressource
- Tutorial: Implementieren einer FireDAC-Ressource in RAD Server
- Tutorial: Implementieren Ihrer ersten RAD Server-Client-Anwendung
- Tutorial: Implementieren einer FireDAC-Client-Anwendung in RAD Server
- RAD Server Engine (EMS-Server)
- Überblick zu REST