I am using Delphi XE2 to write DataSnap REST service. I notice that the REST URI in DataSnap must strictly follow this format (refer here):
http://my.site.com/datasnap/rest/URIClassName/URIMethodName[/inputParameter]*
A famous example is sample method create by DataSnap server wizard:
http://my.site.com/datasnap/rest/TServerMethods1/ReverseString/ABC
There are 2 common ways to supply parameters in URI:
The Path Segment parameter URI is definitely supported by DataSnap REST. Is Query string parameters URI support in DataSnap REST too?
I have the following REST URI example and found it seems impossible to make it work with current DataSnap REST library:
/customers/A1234
return customer object of ID A1234
/customers/A1234.xml
return customer object of ID A1234 in XML format
/customers/A1234.json
return customer object of ID A1234 in json format
/customers/A1234.html
return customer object of ID A1234 in html format
/customers?name=Bill
return a list of customer whose name contain Bill
I don't know how to do it using DataSnap, but there are ways around it. You can put something called URLRewrite to good use for this as both your friendly URI's and the ones required by DataSnap are easily mappable.
For IIS you can use (enable) the URLRewrite module which is standard in IIS 7. More information can be found on the official site: http://www.iis.net/download/urlrewrite.
Be sure to create rules for inbound and outbound URI's so that the "internal" (Datasnap) URI's do not get out into the wild.
If you are running the site on Apache, similar functionality is available, and I thin you need to amend the .htaccess file, but I have no experience with Apache so I could be wrong.
A bit late to the party, but yes you can use query parameters.
You have to use GetInvocationMetadata.QueryParams
see the example below.
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;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With