2012-05-12 3 views
10

Я использую Delphi XE2 для записи службы DataSnap REST. Я заметил, что REST URI в DataSnap должен строго следовать этому формату (см here):Delphi XE2: Как определить пользовательский идентификатор URI DataSnap?

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

Известным примером является пример метод создания с помощью DataSnap мастера сервера:

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

Есть 2 распространенных способов параметры подачи в URI:

  1. Путь параметр Сегмент:/TServerMethods1/ReverseString/ABC
  2. Строка запроса р arameter:/TServerMethods1/customers? name = bill

Параметр URI сегмента пути определенно поддерживается DataSnap REST. Поддерживается ли поддержка параметров URI в параметрах DataSnap REST?

Я следующий пример REST URI и нашел, что это кажется невозможным, чтобы заставить его работать с текущей библиотекой DataSnap REST:

  1. /клиентов/A1234

    объект возврата клиента ID A1234

  2. /customers/A1234.xml

    возвращение объекта клиент ID A1234 в формате XML

  3. /customers/A1234.json

    объект возврата клиентом ID A1234 в формате JSON

  4. /customers/A1234.html

    возврата объекта клиент ID A1234 в формате HTML

  5. /клиенты? Имя = Билл

    возвращает список клиента, имя которого содержит Билл

ответ

5

Я не знаю, как сделать это с помощью DataSnap, но есть пути вокруг него. Вы можете использовать для этого что-то названное URLRewrite, так как ваши дружественные URI и те, которые требуются DataSnap, легко отображаемы.

Для IIS вы можете использовать (включить) модуль URLRewrite, который является стандартным для IIS 7. Более подробную информацию можно найти на официальном сайте: http://www.iis.net/download/urlrewrite.

Обязательно создавать правила для inboundиoutbound URI так, что «внутренние» (DataSnap) адреса URI не выйти в дикую природу.

Если вы используете сайт на Apache, аналогичная функциональность доступна, и я хочу, чтобы вы изменили файл .htaccess, но у меня нет опыта работы с Apache, чтобы я мог ошибаться.

+1

Это было бы утомительно, если бы Rest APP планировал развертывание на многих сайтах. –

+0

@ChauCheeYang: Почему? Это всего лишь пара правил в web.config. Вам не нужно использовать диспетчер IIS для их редактирования, вы можете просто добавить их прямо в web.config для сайта или установить для него сценарий установки. –

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; 
+0

Вы не используете TDSInvocationMetadata.Create() ... это правильно? –

+0

http://docwiki.embarcadero.com/Libraries/XE2/en/Data.DBXPlatform.GetInvocationMetadata Это то, что вы сами не должны создавать, так что да, это правильно – Patrick

Смежные вопросы