Verwenden von RAD Server-Komponenten

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu RAD Server (EMS)


Delegieren der Verarbeitung einer Anforderung an eine benutzerdefinierte Klasse oder Komponente

Der Ressourcen-API von RAD Server wurde die Möglichkeit hinzugefügt, Anforderungsverarbeitungen an Delphi-Felder des Ressourcenmoduls zu delegieren, die Publisher-Klassen/-Komponenten des benutzerdefinierten Endpunkts sind. Zum Beispiel:

type
 TEmpsProvider = class(TComponent, IEMSEndpointPublisher)
 private
   class var
     FArray: TJSONArray;
 private
   function GetItemByID(ARequest: TEndpointRequest): Integer;
   class constructor Create;
   class destructor Destroy;
 public
   procedure Get(const AContext: TEndpointContext; 
     const ARequest: TEndpointRequest; 
     const AResponse: TEndpointResponse); overload;
   [ResourceSuffix('./{id}')]
   procedure GetItem(const AContext: TEndpointContext; 
     const ARequest: TEndpointRequest;
     const AResponse: TEndpointResponse); overload;
   [ResourceSuffix('./{id}')]
   procedure Put(const AContext: TEndpointContext; 
     const ARequest: TEndpointRequest;
     const AResponse: TEndpointResponse);
   procedure Post(const AContext: TEndpointContext; 
     const ARequest: TEndpointRequest;
     const AResponse: TEndpointResponse);
   [ResourceSuffix('./{id}')]
   procedure Delete(const AContext: TEndpointContext; 
     const ARequest: TEndpointRequest;
     const AResponse: TEndpointResponse);
 end;
 [ResourceName('Test')]
 TTestResource = class(TDataModule)
 public
   Emps: TEmpsProvider;
   constructor Create(AOwner: TComponent); override;
 end;

Die folgenden Anforderungen werden von der Methode TEmpsProvider des Emps-Objekts verarbeitet:

  • GET http://localhost/test/emps – Methode TEmpsProvider.Get.
  • GET http://localhost/test/emps/1 – Methode TEmpsProvider.GetItem.

Des Weiteren:

  • Die Anforderungsverarbeitung kann an ein Ressourcenmodulfeld des Objekttyps delegiert werden. Der Objekttyp kann jede Klasse sein (einschließlich Nachkommen von TComponent), die das IEMSEndpointPublisher-Interface implementiert. Eine Klasse wird Publisher-Klasse des Endpunkts genannt.
  • Standardmäßig erhalten alle Klassenendpunkte ein Ressourcensuffix, das dem Feldnamen des Ressourcenmoduls entspricht. Dies kann bei der Angabe von Attributen für das Ressourcenmodulfeld überschrieben werden:
    • ResourceName – zum Überschreiben des Feldnamens.
    • ResourceSuffix – zum Überschreiben des Ressourcensuffix.
  • Ein Klassenendpunkt kann mit einem ResourceSuffix-Attribut gekennzeichnet werden. Wenn das Suffix mit "./" beginnt, dann wird das angegebene Suffix an das Standardressourcensuffix des Ressourcenmodulfelds angehängt.
  • Jedes für einen Ressourcenmodulendpunkt angegebene Attribut kann für einen Klassenendpunkt angegeben werden. Ein Attribut kann an einer der Positionen nach Priorität angegeben werden (geringe Priorität an Anfang der Liste, höhere Priorität hat Vorrang vor Attributen mit geringerer Priorität):
    • Klassenendpunkt
    • Ressourcenmodulfeld. Ein erstes Argument eines Attributs kann ein Name eines Klassenendpunkts sein.
    • Bei der Registrierung des Ressourcenmoduls angegebene TEMSResourceAttributes. Ein für TEMSResourceAttributes-Aufrufe verwendeter Name ist ein <Ressourcenmodul-Feldname>.<Klassenendpunktname>

Hilfskomponenten für die JSON-Verarbeitung

Aufgrund der neuen Möglichkeit, die Verarbeitung an eine Komponente zu delegieren, enthält RAD Studio 10.3 neue Komponenten zur Vereinfachung der JSON-Verarbeitung, insbesondere bei Datenbankabfragen. Die Komponenten können einer Klasse hinzugefügt werden, die einer RAD Server-Ressource (oder einem Datenmodul) zugeordnet ist, und die HTTP-Methoden können ohne Schreiben von Code diesen Ressourcen zugeordnet werden.

  • Die Komponente TEMSFileResource verfügt über Eigenschaften, die den Pfad und den Standarddateinamen angeben.
  • Die Komponente TEMSDataSetResource verfügt über eine Referenz auf ein DataSet und Eigenschaften für Paging-Größe und für das Sortieren und Paging von Abfrageparamaternamen.

Beide Komponenten können so konfiguriert werden, dass sie bestimmte HTTP-Verben akzeptieren, und können mit der Hosting-Ressource, wie im folgenden Beispielcode, verbunden werden:

  [ResourceName('Notes')]
 TNotesResource1 = class(TDataModule)
   FDConnection1: TFDConnection; // connects to SQLite DB with "notes" table
   FDQuery1: TFDQuery; // SELECT * FROM Notes
   [ResourceSuffix('list', '/')]
   [ResourceSuffix('get', '/{id}')]
   [ResourceSuffix('put', '/{id}')]
   [ResourceSuffix('post', '/')]
   [ResourceSuffix('delete', '/{id}')]
   EMSDBResource1: TEMSDataSetResource;
 end;
      // database resource
   [ResourceSuffix('/')]
   EMSDBResource1: TEMSDataSetResource;
   [ResourceSuffix('/')]
   [EndpointProduce('get', 'image/jpeg, image/png')]
   EMSDBResource1: TEMSDataSetResource;
      // file resource
   [ResourceSuffix('/')]
   [EndpointProduce('get', 'application/pdf')]
   EMSFileResource1: TEMSFileResource;

Siehe auch