对于使用 TidHttpServer 实现的 Web 服务器,我应该使用哪种描述语言



我正在使用德尔福XE2更新4印地10

我有一个使用 idHttpServer 实现的 Web 服务,它应答传统的 Http Get 请求,其中我只与从 URI 检索到的变量进行交互。

该Web服务器已经为局域网等内置了许多其他功能。所以我正在考虑让它比迁移到新平台更好。

并发 acency 的数量非常低:每次最多 5 个。Web 服务从 SQL 服务器检索数据并使用 JSON 进行应答。

我想以可以描述和检索的方式重写此服务器的服务产品。非常像DCOM Iunknown和Idispatch功能。我不需要它像WSDL那样成为一种公开的完全实现的语言。

对我来说,架构的 RESTful 风格比与 SOAP 相关的任何东西都更接近我所拥有的。

我读到一点,datasnap有一个Indy核心选项,可以做RESTful,但我不想使用Apache或IIS,我想成为一个常规的Windows应用程序。我听说了太多关于DataSnap的坏话...

我已经读过关于AtomPub和RSDL的信息,我不知道其他的,但我需要有一些关于delphi的代码来开始使用它。

的问题:我应该使用哪种描述语言,我可以找到组件/示例以快速开始使用我的idHttpServer服务器?

服务的描述语言可能是德尔福interface本身。由于您不需要发布它,因此它使其成为安全且简单的解决方案。

考虑您的请求:

我想以这种方式重写此服务器的服务产品 可以描述和检索。很像DCOM Iunknown。 和 Idispatch 功能。我不需要它成为公开的完整 实现了像 WSDL 这样的语言。

您可以考虑使用我们基于开源 mORMot 接口的服务来发布和使用您的服务。

他们通过HTTP和REST使用JSON,几乎所有都是自动化的。您只需要使用普通interface定义您的服务,这些服务将用作服务协定:

type
  ICalculator = interface(IInvokable)
    ['{9A60C8ED-CEB2-4E09-87D4-4A16F496E5FE}']
    /// add two signed 32 bit integers
    function Add(n1,n2: integer): integer;
  end;

然后在服务器端,将其实现为常规的 Delphi 类:

type
  TServiceCalculator = class(TInterfacedObject, ICalculator)
  public
    function Add(n1,n2: integer): integer;
  end;
function TServiceCalculator.Add(n1, n2: integer): integer;
begin
  result := n1+n2;
end;
 Server.ServiceRegister(TServiceCalculator,[TypeInfo(ICalculator)],sicShared);

而且您在客户端使用服务,而无需生成任何包装器:

var I: ICalculator;
begin
  if Client.Services['Calculator'].Get(I)) then
    result := I.Add(10,20);
end;

mORMot 服务器在设计上是独立的(不需要 IIS 或 Apache),您可以将它们作为应用程序或服务运行。您还有其他功能,例如安全性,身份验证或会话处理,并且性能相当不错。从Delphi 6到XE4,面向Win32和Win64平台。

附注:

您甚至可以设置TServiceContainerServer.PublishSignature := true并使用_signature_伪方法来检索简单的 JSON 签名:

[
    {
    "contract":"Calculator",
    "implementation":"shared",
    "methods":
        [
            {
            "method":"Add",
            "arguments":
                [
                    {"argument":"Self","direction":"in","type":"self"},
                    {"argument":"n1","direction":"in","type":"integer"},
                    {"argument":"n2","direction":"in","type":"integer"},
                    {"argument":"Result","direction":"out","type":"integer"}
                ]
            }
        ]
    }
]

最新更新