0

我有一个 Web 服务,在设计时在 TWebModule 上定义了越来越多的 TWebAction 项,并与 OnAction 事件耦合。

请求是通过 URL 进行的 HTTP GET,响应是“手工制作”的 JSON 数据,即在运行时使用诸如'TSuperObject'.S['errormessage'] := lErrMsg;
我想将其更改为带有 JSON 数据的 HTTP POST 请求的语句组成,然后将所有请求/响应 JSON 结构从(反)序列化/ 到使用 SuperObjects TSuperRttiContext AsJSONAsType方法的正确对象(可能还有记录) 。

如何创建数据结构以将我的新“要 JSON(反)序列化的对象”与设计时 TWebactions 映射/链接?这些对象都是不同的(一些属性可以在一个共同的祖先中),并且可能包含对象或记录属性本身(例如FData: Array of TSubObject[SuperObject可以很好地序列化]之类的东西)。

注意:已经有一个快速而肮脏的枚举类型,我用来收集时间统计信息(也需要维护),它也可以集成。

type
   TWebAct = (
    ttinfo,
    ttlogin,
    ...
    ttgetcostitemlist,
    ttgetvacationplanning
    );

基本上,我想在添加新的 TWebAction 时尽量减少需要进行维护的地方的数量。

4

1 回答 1

1

您可以使用TWebAct枚举将一组记录放在一起,这些记录将 Web 操作与其各自的请求和响应结构联系起来。

type
  // ancestor class for all requests and responses
  TJSONStructure = class(TObject);

  TJSONRequest = class(TJSONStructure);
  TJSONRequestClass = class of TJSONRequest;

  TJSONResponse = class(TJSONStructure);
  TJSONResponseClass = class of TJSONResponse;

const 
  WEBACT_STRUCTURES: array[TWebAct] of 
    record
      RequestClass: TJSONRequestClass;
      ResponseClass: TJSONResponseClass;
    end = (
      {ttInfo}   (RequestClass: TInfoRequest; ResponseClass: TInfoResponse)
    , {ttLogin}  (RequestClass: TLoginRequest; ResponseClass: TLoginResponse)
    ...
  );
于 2013-08-06T17:24:37.110 回答