RAD サーバー コンポーネントの利用

提供: RAD Studio
移動先: 案内検索

RAD サーバー(EMS) への移動


リクエストの処理をカスタム クラスまたはコンポーネントへ委譲する機能

RAD Server のカスタム リソース API に、リクエストの処理をリソース モジュール Delphi フィールド(カスタム エンドポイント パブリッシャ クラス / コンポーネント)に委譲する機能が追加されました。 例:

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;

以下のリクエストは、Emps オブジェクトの TEmpsProvider メソッドによって処理されます:

  • GET http://localhost/test/emps - TEmpsProvider.Get メソッド
  • GET http://localhost/test/emps/1 - TEmpsProvider.GetItem メソッド

さらに:

  • リクエストの処理は、オブジェクト型のリソース モジュール フィールドに委譲することが可能です。オブジェクト型は、IEMSEndpointPublisher インターフェイスを実装する任意のクラス(TComponent 下位クラスも含む)がなりえます。クラスは、エンドポイント パブリッシャ クラスと呼ばれます。
  • デフォルトでは、すべてのクラス エンドポイントが、リソース モジュール フィールド名と同じリソース接尾辞を取得します。これは、リソース モジュール フィールドの属性を変更することで上書き可能です:
    • ResourceName - フィールド名を上書きするもの。
    • ResourceSuffix - リソースの接尾辞を上書きするもの。
  • クラス エンドポイントは、ResourceSuffix 属性によってマーク付けされます。接尾辞が "./" で始まる場合、指定された接尾辞はリソース モジュール フィールドのデフォルトのリソース接尾辞の後ろに追加されます。
  • リソース モジュール エンドポイントに対して指定された属性はいずれも、クラス エンドポイントに対して指定されます。属性は、優先度の順にいずれか一か所で指定することが可能です(リストのはじめの方が優先度が低く、より高い優先度が低い優先度の属性を上書きします):
    • クラス エンドポイント
    • リソース モジュール フィールド。属性の最初の引数は、クラス エンドポイント名です。
    • リソース モジュールの登録で指定される TEMSResourceAttributes。TEMSResourceAttributes の呼び出しで使用される名前は、<リソース モジュール フィールド名>.<クラス エンドポイント名> です。

JSON 処理のためのヘルプ コンポーネント

コンポーネントに処理を委譲する新しい機能を利用して、RAD Studio 10.3 では、JSON の処理作業をシンプルにするための新しいコンポーネントが導入されており、特にデータベース クエリが呼び出される際に利用されます。 コンポーネントは、RAD Server リソース(またはデータ モジュール)へマップされるクラスに追加でき、HTTP メソッドは、コードを記述することなくそれらにマップすることができます。

  • TEMSFileResource コンポーネントには、パスおよびデフォルト ファイル名を示すプロパティがあります。
  • TEMSDataSetResource は、DataSet への参照、および、ページング サイズのためのプロパティ、ソートおよびページング クエリのパラメータ名があります。

このサンプル コードのように、両コンポーネントは、特定の HTTP 動詞を受け取るよう設定され、ホスト リソースと接続されます:

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

関連項目