【问题标题】:Delphi XE2: How to define custom DataSnap REST URI?Delphi XE2:如何定义自定义 DataSnap REST URI?
【发布时间】:2012-05-20 16:55:23
【问题描述】:

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

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. /customers/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

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

【问题讨论】:

    标签: delphi rest delphi-xe2 datasnap


    【解决方案1】:

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

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

    确保为inbound outbound URI 创建规则,这样“内部”(Datasnap)URI 就不会泄露出去。

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

    【讨论】:

    • 如果Rest APP要部署在许多站点上,那将是乏味的。
    • @ChauCheeYang:为什么?这只是 web.config 中的几条规则。您不需要使用 IIS 管理器来编辑它们,您可以直接将它们添加到站点的 web.config 中,或者让安装脚本为您完成。
    【解决方案2】:

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

    您必须使用 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;
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2014-07-05
    相关资源
    最近更新 更多