CG/PL: обработка HTTP запро�ов

ïÔ: Alexey Naidyonov <CGatePro_at_mx_ru>
äÁÔÁ: Tue 07 Nov 2006 - 12:04:36 MSK


÷ÌÁÄÉÍÉÒ, ÄÏÂÒÙÊ ÄÅÎØ.

÷ÏÚÍÏÖÎÏ ÌÉ ÒÅÁÌÉÚÏ×ÁÔØ ÍÅÈÁÎÉÚÍ ÄÌÑ ÏÂÒÁÂÏÔËÉ HTTP ÚÁÐÒÏÓÏ× Ó ÐÏÍÏÝØÀ CG/PL ÐÒÏÇÒÁÍÍ? îÁÐÒÉÍÅÒ ÔÁË:

1. ÷ ÎÁÓÔÒÏÊËÁÈ HTTP ÍÏÄÕÌÑ ÄÏÂÁ×ÌÑÅÔÓÑ ÎÁÓÔÒÏÊËÁ "CG/PL Applications":

CG/PL Common URL Prefix: /cgpl
CG/PL Account URL Prefix: /cgpl

URL Task
acd/queuestate acd.ajaxui.getqueuestate acd/queuecmd acd.ajaxui.issuequeuecmd ~/conf/userlist personalconference.ajaxui.getuserlist ...

2. ðÒÉ ÚÁÐÒÏÓÅ ÎÁ URL http://server/cgpl/acd/queuestate ÉÌÉ http://server/~username/cgpl/conf/userlist ÚÁÐÕÓËÁÅÔÓÑ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÁÑ ÚÁÄÁÞÁ, ËÏÔÏÒÁÑ ÐÏÌÕÞÁÅÔ ÎÁ ×ÈÏÄ ÓÌÏ×ÁÒØ Ó ÚÁÐÒÏÓÏÍ
(Vars().httpRequest). úÁÄÁÞÁ ÚÁÐÕÓËÁÅÔÓÑ × ÓÐÅÃÉÁÌØÎÏÍ ÒÅÖÉÍÅ, ÆÕÎËÃÉÉ,
ËÏÔÏÒÙÅ Ó×ÑÚÁÎÙ Ó ÏÂÒÁÂÏÔËÏÊ ÓÉÇÎÁÌÏ×, ÂÕÄÕÔ ×ÏÚ×ÒÁÝÁÔØ ÏÛÉÂËÉ, ÎÏ ÐÒÉ ÜÔÏÍ ÚÁÄÁÞÁ ÍÏÖÎÏ ÓÔÁÒÔÏ×ÁÔØ ÄÒÕÇÉÅ ÚÁÄÁÞÉ É ÕÞÁÓÔ×Ï×ÁÔØ × ÏÂÍÅÎÅ ÓÏÏÂÝÅÎÉÑÍÉ É ÓÉÎÈÒÏÎÉÚÁÃÉÉ.

3. ÷ ÐÒÉÎÃÉÐÅ, ÜÔÏÔ ÍÅÈÁÎÉÚÍ ÎÕÖÅÎ ÔÏÌØËÏ ÄÌÑ ÕÐÒÁ×ÌÅÎÉÑ, ÐÏÎÑÔÎÏ, ÞÔÏ ÚÁËÁÞÉ×ÁÔØ/ÓËÁÞÉ×ÁÔØ ÆÁÊÌÙ ÔÁËÉÍ ÏÂÒÁÚÏÍ ÎÉËÔÏ ÎÅ ÂÕÄÅÔ, Õ CGP ÅÓÔØ ÄÌÑ ÜÔÏÇÏ ÂÏÌÅÅ ÕÄÏÂÎÙÅ ÍÅÈÁÎÉÚÍÙ. ðÏÜÔÏÍÕ ÍÏÖÎÏ ÏÇÒÁÎÉÞÉÔØ ÒÁÚÍÅÒ ×ÈÏÄÑÝÅÇÏ ÚÁÐÒÏÓÁ, É ÏÔÄÁ×ÁÔØ ÔÅÌÏ ÚÁÐÒÏÓÁ × ×ÉÄÅ ÓÔÒÏËÉ ÉÚ ÓÌÏ×ÁÒÑ
(Vars().httpRequest.body).

4. äÌÑ ×ÙÄÁÞÉ ÉÎÆÏÒÍÁÃÉÉ ÏÂÒÁÔÎÏ, ÔÅÍ ÎÅ ÍÅÎÅÅ, ÈÏÞÅÔÓÑ ×ÓÅ-ÔÁËÉ ÉÍÅÔØ ×ÏÚÍÏÖÎÏÓÔØ ÐÉÓÁÔØ × ÐÏÔÏË, ÞÁÎËÁÍÉ.

úÁÞÅÍ ÜÔÏ ÎÕÖÎÏ:
- ÄÌÑ ÒÅÛÅÎÉÑ ÚÁÄÁÞ ÕÐÒÁ×ÌÅÎÉÑ ÐÒÉÌÏÖÅÎÉÅÍ, ËÏÇÄÁ ÍÙ ÎÅ ÍÏÖÅÍ ÏÔÄÁÔØ XIMSS. îÁÐÒÉÍÅÒ, ÜÔÏ ×ÎÅÛÎÉÊ ÁÂÏÎÅÎÔ, ËÏÔÏÒÙÊ ÐÒÉÎÉÍÁÅÔ ÕÞÁÓÔÉÅ × ËÏÎÆÅÒÅÎÃÉÉ "ÎÁÛÅÇÏ" ÁÂÏÎÅÎÔÁ. ïÎ Á×ÔÏÒÉÚÏ×ÁÎ (ÚÎÁÎÉÅÍ ÐÉÎ-ËÏÄÁ, ËÏÔÏÒÙÊ ÄÁÌ ÅÍÕ "ÎÁÛ" ÁÂÏÎÅÎÔ), ÎÏ ÄÁ×ÁÔØ ÅÍÕ ÄÏÓÔÕÐ ÐÏ XIMSS ÍÙ ÎÅ ÍÏÖÅÍ. ïÐÑÔØ ÖÅ, ÜÔÏ ÐÏÌÎÏÓÔØÀ ÒÅÛÁÅÔÓÑ ×ÎÅÛÎÉÍ ÐÒÏËÓÉ (ËÏÔÏÒÙÊ Ë CGP ÕÖÅ ÍÏÖÅÔ ÂÙÔØ ÐÏÄËÌÀÞÅÎ ÐÏ XIMSS), ÎÏ ÈÏÔÅÌÏÓØ ÂÙ ÏÂÏÊÔÉÓØ ÂÅÚ ÎÅÇÏ. ñ ÎÅ ÂÕÄÕ ÏÐÉÓÙ×ÁÔØ ÐÏÄÒÏÂÎÏ ÆÕÎËÃÉÉ, ËÏÔÏÒÙÅ, ÎÁ ÍÏÊ ×ÚÇÌÑÄ, ÐÏÎÁÄÏÂÑÔÓÑ, ÐÒÏÓÔÏ ÐÒÉ×ÅÄÕ ËÕÓÏË ËÏÄÁ "ËÁË ÎÁÍ ÂÙÌÏ ÂÙ ÕÄÏÂÎÏ". åÓÌÉ ÅÓÔØ ÎÁÄÅÖÄÁ, ÞÔÏ ÔÁËÁÑ ×ÏÚÍÏÖÎÏÓÔØ ÐÏÑ×ÉÔÓÑ -- Ó ÕÄÏ×ÏÌØÓÔ×ÉÅÍ ÐÏÔÒÁÞÕ ×ÒÅÍÑ ÎÁ ÐÒÏÅËÔÉÒÏ×ÁÎÉÅ api Ó Ô.Ú. ÒÁÚÒÁÂÏÔÞÉËÁ.

entry main is
  req = Vars().httpRequest;
  query = TextToObject(req.body);
  if query != null and then IsDictionary(query) then     res = newDictionary();
    res.rc = 200;
    ...
    res.body = ObjectToString(queryResult);     res.header.("Content-Type") = "text/cgp-dictionary";     HTTPSendResponse(res);
  else
    res = newDictionary();
    res.rc = 500;
    res.body = "<HTML><BODY>Error parsing query</BODY></HTML>";     HTTPSendResponse(res);
  end if;
end entry;

entry main is
  req = Vars().httpRequest;
  confId = req.queryParam.("confId");
  if RemoteAuthentication() != null then     res = newDictionary();

    res.rc = 200;
    res.header.("Content-Type") = "text/html";
    res.header.("Transfer-Encoding") = "chunked";
    HTTPSendResponseHeaders(res);
    HTTPOpenStream();
    HTTPWrite("<HTML><BODY>");
    while ... loop
       ...
       HTTPWrite(....);

    end loop;
    HTTPWrite("</BODY></HTML>");
    HTTPCloseStream();
  else
    res = newDictionary();
    res.rc = 403;
    res.body = "<HTML><BODY>Access denied</BODY></HTML>";     HTTPSendResponse(res);
  end if;
end entry;

SY,
--
Alexey Naidyonov
ITooLabs ðÏÌÕÞÅÎÏ Tue Nov 07 09:04:38 2006

üÔÏÔ ÁÒÈÉ× ÂÙÌ ÓÇÅÎÅÒÉÒÏ×ÁÎ hypermail 2.1.8 : Fri 24 Apr 2015 - 16:15:15 MSK