我正在使用Delphi XE2 Update 4 Indy 10
我有一个用idHttpServer实现的web服务,它回答了传统的Http Get请求,我只与从URI中检索的变量进行交互。
这个网络服务器已经为局域网等内置了许多其他功能。所以我正在考虑让它比移动到新平台更好。
并发次数非常低:每次最多5次。 Web服务从SQL服务器检索数据并使用JSON进行回答。
我想以可以描述和检索的方式重写此服务器的服务。非常类似于DCOM Iunknown和Idispatch功能。我不需要它是像WSDL那样的公共完整实现语言。
对我来说,架构的RESTful风格比我所拥有的更接近于SOAP。
我读到一点,datasnap有一个Indy核心选项,可以做RESTful但是我不想使用Apache或IIS,我想成为一个常规的Windows应用程序。我听说DataSnap有太多不好的事情......
我已经读过有关AtomPub和RSDL的内容,我不了解其他内容,但我需要在delphi上有一些代码才能开始使用它。
我的问题:我应该使用哪种描述语言,我可以找到组件/示例,以便快速开始使用我的idHttpServer服务器?
答案 0 :(得分:2)
您的服务的描述语言可能是Delphi interface
本身。由于您不需要发布它,因此它使其成为一种安全且简单的解决方案。
考虑您的要求:
我想以这种方式重写此服务器的服务 可以描述和检索。非常像DCOM Iunknown 和Idispatch功能。我不需要它是一个公众满满的 实现了像WSDL这样的语言。
您可以考虑使用我们的开源 mORMot interface-based services来发布和使用您的服务。
他们使用JSON over HTTP和REST,几乎所有都是自动化的。您只需要使用will be used as service contracts:
的普通interface
来定义您的服务
type
ICalculator = interface(IInvokable)
['{9A60C8ED-CEB2-4E09-87D4-4A16F496E5FE}']
/// add two signed 32 bit integers
function Add(n1,n2: integer): integer;
end;
然后on the server side, you implement it as a regular Delphi class:
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);
而且you consume the services on the client side不需要生成任何包装器:
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平台。
PS:
您甚至可以设置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"}
]
}
]
}
]