Utilisation des composants de RAD Server

De RAD Studio
Aller à : navigation, rechercher

Remonter à RAD Server (EMS)


Capacité à déléguer le traitement d'une requête à une classe ou un composant personnalisé

Ils procurent à l'API des ressources personnalisées de RAD Server la possibilité de déléguer le traitement des requêtes à des champs Delphi de module de ressource, qui sont des composants/classes de publieur de point de terminaison personnalisé. Par exemple :

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;

Les requêtes suivantes seront traitées par les méthodes TEmpsProvider de l'objet Emps :

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

De plus :

  • Le traitement de requête peut être délégué à un champ de module de ressource de type objet. Le type objet peut être toute classe (y compris le descendant TComponent) implémentant l'interface IEMSEndpointPublisher. C'est une classe publieur de point de terminaison.
  • Par défaut, tous les points de terminaison de la classe auront un suffixe de ressource équivalent à un nom de champ du module de ressource. Ce comportement peut être modifié en spécifiant des attributs pour le champ du module de ressource :
    • ResourceName - pour redéfinir le nom de champ.
    • ResourceSuffix - pour redéfinir le suffixe de ressource.
  • Un point de terminaison de classe peut être marqué avec un attribut ResourceSuffix. Lorsque le suffixe commence par "./", le suffixe spécifié est ajouté au suffixe de ressource par défaut du champ du module de ressource.
  • Tout attribut spécifié pour le point de terminaison d'un module de ressource peut être spécifié pour le point de terminaison d'une classe. Un attribut peut être spécifié à l'un des emplacements dans l'ordre de priorité (priorité moindre au début de la liste, une priorité supérieure remplace un attribut de priorité inférieure) :
    • Point de terminaison de la classe
    • Champ du module de ressource. Le premier argument de l'attribut peut être le nom du point de terminaison d'une classe.
    • Le TEMSResourceAttributes spécifié lors de l'enregistrement d'un module de ressource. Le nom utilisé pour les appels à TEMSResourceAttributes est un <nom de champ du module de ressource>.<nom du point de terminaison de la classe>

Composants helper pour le traitement JSON

En tirant parti de la nouvelle capacité à déléguer le traitement à un composant, RAD Studio 10.3 introduit de nouveaux composants pour simplifier le traitement JSON, notamment lorsque des requêtes de base de données sont impliquées. Les composants peuvent être ajoutés à une classe mappée à une ressource RAD Server (ou un module de données), et les méthodes HTTP peuvent être mappées à ces composants sans qu'il soit nécessaire d'écrire du code.

  • Le composant TEMSFileResource comporte des propriétés indiquant le chemin et le nom du fichier par défaut.
  • Le composant TEMSDataSetResource comporte une référence à l'ensemble de données et des propriétés pour la taille de pagination, les noms des paramètres des requêtes de pagination et de tri.

Les deux composants peuvent être configurés de façon à accepter des verbes HTTP spécifiques et sont connectés avec la ressource d'hébergement, comme dans ce code exemple :

  [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;

Voir aussi