REST Datasnap переопределяет сопоставление URI

Я написал небольшой сервер REST с REST datasnap в delphi XE2. Существует сопоставление по умолчанию между методами HTTP (POST, PUT и т. д.) и функциями, определенными в delphi, это делается компонентом delphi.

Эта вики-запись описывает сопоставление URI, но также отмечает, что сопоставление по умолчанию можно переопределить. программистом.

Шаблон сопоставления можно переопределить. Пользователь может переопределить сопоставление для каждого типа на основе параметров имени класса и имени метода.

Но я не нашел объяснения, как переопределить сопоставление.

Как я могу изменить сопоставление по умолчанию?


person MBulli    schedule 22.11.2011    source источник
comment
Обходной путь см. здесь: codeverge.com/embarcadero.datasnap/   -  person aleroot    schedule 30.01.2015


Ответы (2)


Компонент TDSHTTPService имеет события, в которых можно указать сопоставление для каждого типа. Эти события называются RESTMethodNameMapDELETE, RESTMethodNameMapGET, RESTMethodNameMapPOST и RESTMethodNameMapPUT.

Это также объясняется в белой книге REST Марко Канту, которая многое объясняет о REST и Datasnap.

person Geerten    schedule 21.12.2011
comment
Спасибо за ваш ответ, я попробую, когда вернусь в офис. Но в прошлый раз не нашел этих событий, сейчас внимательно посмотрю. - person MBulli; 24.12.2011
comment
Похоже, что вышеназванные события реализованы в TDSHTTPServerTransport, а TDSHTTPService наследуется от него. Я искал исходный код TDSHTTPServerTransport, но не смог найти эти события. - person MBulli; 28.12.2011
comment
У вас есть компонент TDSHTTPService в дизайне вашего сервера? Потому что там, где я их назначил. - person Geerten; 28.12.2011
comment
Да, я добавил один. Я использую XE2, какую версию вы используете? - person MBulli; 29.12.2011
comment
Я использую XE и меняю работу, поэтому я больше не использую Delphi и поэтому не могу искать вас в XE2. - person Geerten; 29.12.2011

Мне было интересно то же самое, и я провел несколько экспериментов. Кажется, что хотя бы частично можно контролировать URL-адрес. В частности, я попытался изменить часть имени класса в URL-адресе.

По сути, если вы используете потомок TComponent, вы можете назвать класс как угодно. Это не работает, если вы наследуете от TDataModule. В этом случае вы можете создать псевдоним класса, который вы можете назвать, как хотите, который происходит от вашего TDataModule.

Вам нужно сделать некоторую очистку в привязке клиента при попытке привязки к этому, но, похоже, это работает, по крайней мере, для простых тестов.

Дополнительную информацию см. на форумах Embarcadero.

https://forums.embarcadero.com/thread.jspa?threadID=77624&tstart=0

person Anders E. Andersen    schedule 03.10.2012