Перейти к содержанию
Fire Monkey от А до Я
  • 0

DataSnap sever с сессией через REST клиент (php, js..)


Вопрос

Добрый всем день!

Уважаемые коллеги, столкнулись с такой проблемой.

Если есть DataSnap сервер, работающий в режиме Session, и клиент, написанный на Delphi с использованием TSqlConnection к серверу по протоколу DataSnap.

то все работает. Т.е. клиент открывает соединение,   вызывает методы сервера , при этом на сервере, в экземпляре класса ServerMethod ( живущий от Коннекта, до его закрытия) - хранятся все данные сессии, ИД клиента, его настройки и т.д., и закрыват соединение, при этом сервер уничтожает  экземпляр класса ServerMethod, со всеми данными.

Встал вопрос, как использовать этот же сервер, с другими клиентами, работающими по REST, например PHP, JS.

У DS сервера есть rest протокол, НО! после любого обращения по REST, сервер создает и уничтожает сразу класс ServerMethod ( т.е. работает в режиме LifiCicle = Invocation, о чем честно написано в документации)

Т.е. хранить данные подключения не получится.

Чтобы не переписывать сервер, решили попытаться прикинуться клиентом DS. Поставили между сервером DS и клиентом DS снифер. Выяснилось, что они общаются между собой по интерфейсу tunel.

т.е. вместо http://docwiki.embarcadero.com/RADStudio/Rio/en/DataSnap_REST_Messaging_Protocol

Цитата

http://host:port/datasnap/rest/[ClassName]/[MethodName]/[ParamValue]

надо обращаться на http://host:port/datasnap/tunnel/[ClassName]/[MethodName]/[ParamValue]

вообщем там целая жизнь из команд PUT, GET..  

Описания этого протока не нашел..

Может кто уже имел такой опыт по сопряжению REST клиента и DS сервера в режиме LifeCicle = Session.

В приложенном файле протоколе обмена 

- открытие соединения c с клиента , без авторизации  ( TSqConnect )

- выполнение метода LoginByKartVDevOsDOC с параметрами - внутренний логин в систему,

пс. а почему txt нельзя прикрепить?? пришлось зарарить.. 

 

 

protokol DataSnap.rar

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Одно из основных требований протокола REST - отсутствия состояния. Т.е. сервер ничего не должен хранить: запрос от клиента, ответ от сервера, все. Никаких сессий и прочей мути. 

То что у вас на данный момент реализовано - велосипедный костыль, поэтому никакие стандартные фреймворки с этим работать не будут. 

P.S. Прочитал ваше сообщение внимательнее - все верно у вас работает. 

"НО! после любого обращения по REST, сервер создает и уничтожает сразу класс ServerMethod" - вот так и должно быть.

Изменено пользователем Евгений Корепов
Ссылка на комментарий
  • 0
10 часов назад, Евгений Корепов сказал:

НО! после любого обращения по REST, сервер создает и уничтожает сразу класс ServerMethod"

да, про это и написано в доках. Но при обращении на rest, в хедере, директиве Pragma=dss=ИД сессии , сервер возвращает ИД. Если слать ему ее обратно на сервер, то идет обмен все время с этим ИД. Т.Е сессия на Рест живет, Но ServerMethod уничтожается. Чего нет при обращении по tunnel ( вместо rest). Зачем ид сессии по рест, если сессии в ДС нет? явная недоделка, которую и хотел немного подправить - смоделировав обмен, как будто ДС клиент.

Фреймворки не смогут.. ну можно библиотечку для PHP, JS сделать.. и смогут..

Но, к сожалению. времени нет, описания протокола tunnel нет, решил переделать методы ДС сервера на открытые, т.е. все параметры в запросе.. а сессию пусть пхп-браузер в своих куках, переменных держат. Моя сторона только ДС сервер, задача сделать АПИ для других организаций.

Но если кто то раскопал про тунели.. буду рад любой информации.

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...