Delphi XE2: How to define custom DataSnap REST URI?
datasnap, delphi, delphi-xe2, rest
Solution
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.
Problem
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: - Path Segment parameter: /TServerMethods1/ReverseString/ABC - Query String parameter: /TServerMethods1/customers?name=bill 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