10

我正在使用 Delphi XE2 编写 DataSnap REST 服务。我注意到 DataSnap 中的 REST URI 必须严格遵循这种格式(请参阅此处):

http://my.site.com/datasnap/rest/URIClassName/URIMethodName[/inputParameter]*

一个著名的例子是 DataSnap 服务器向导创建的示例方法:

http://my.site.com/datasnap/rest/TServerMethods1/ReverseString/ABC

在 URI 中提供参数的常用方法有两种:

  1. 路径段参数:/TServerMethods1/ReverseString/ABC
  2. 查询字符串参数:/TServerMethods1/customers?name=bill

DataSnap REST 绝对支持 Path Segment 参数 URI。DataSnap REST 中是否也支持查询字符串参数 URI?

我有以下 REST URI 示例,发现它似乎无法与当前的 DataSnap REST 库一起使用:

  1. /客户/A1234

    返回 ID 为 A1234 的客户对象

  2. /customers/A1234.xml

    以 XML 格式返回 ID A1234 的客户对象

  3. /customers/A1234.json

    以 json 格式返回 ID A1234 的客户对象

  4. /customers/A1234.html

    以 html 格式返回 ID A1234 的客户对象

  5. /customers?name=比尔

    返回名称包含 Bill 的客户列表

4

2 回答 2

5

我不知道如何使用 DataSnap 来做到这一点,但有一些方法可以解决它。您可以很好地使用称为 URLRewrite 的东西,因为您的友好 URI 和 DataSnap 所需的 URI 都可以轻松映射。

对于 IIS,您可以使用(启用)IIS 7 中标准的 URLRewrite 模块。更多信息可以在官方网站上找到:http ://www.iis.net/download/urlrewrite 。

确保为入站 出站URI 创建规则,以使“内部”(Datasnap)URI 不会外泄。

如果您在 Apache 上运行该站点,则可以使用类似的功能,并且我认为您需要修改 .htaccess 文件,但我没有使用 Apache 的经验,所以我可能是错误的。

于 2012-05-12T09:43:58.610 回答
3

聚会有点晚了,但是是的,您可以使用查询参数。

您必须使用 GetInvocationMetadata.QueryParams

请参见下面的示例。

uses DBXPlatform;

function TServerMethods1.EchoString(Value: string): string;
var
  metaData: TDSInvocationMetadata;
  i: integer;
begin
  metaData := GetInvocationMetadata;
  for i := 0 to Pred(metaData.QueryParams.Count) do
  begin
    Result := Result + '<param>' + metaData.QueryParams[i] + '</param>';
  end;
  metaData.ResponseContent := '<xml>' + Result + '</xml>';
end;
于 2014-02-19T12:04:54.717 回答