我正在使用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中提供参数有两种常用方法:
DataSnap REST肯定支持Path Segment参数URI。 DataSnap REST中是否支持查询字符串参数URI?
我有以下REST URI示例,发现似乎无法使其与当前的DataSnap REST库一起使用:
/客户/ A1234
返回ID A1234的客户对象
/customers/A1234.xml
以XML格式返回ID A1234的客户对象
/customers/A1234.json
以json格式返回ID A1234的客户对象
/customers/A1234.html
以html格式返回ID A1234的客户对象
/客户?名称=比尔
返回名称中包含Bill
答案 0 :(得分:5)
我不知道如何使用DataSnap来实现它,但有很多方法可以解决它。您可以将名为URLRewrite的东西用于此,因为友好的URI和DataSnap所需的URI都可以轻松映射。
对于IIS,您可以使用(启用)IIS 7中标准的URLRewrite模块。更多信息可以在官方网站上找到:http://www.iis.net/download/urlrewrite。
请务必为inbound 和 outbound URI创建规则,以便“内部”(Datasnap)URI不会流入野外。
如果您在Apache上运行该站点,可以使用类似的功能,而且我需要修改.htaccess文件,但我没有使用Apache的经验,所以我可能错了。
答案 1 :(得分: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;