Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 CSP. JSON.  [new]
Darkhan Darkhan
Member

Откуда:
Сообщений: 22
Посмотрел в этом форуме статьи про JSON в CSP. Но ничего путного не нашел.
Есть ли в Cache адаптер JSON для CSP? Может у кого-то свои собственно ручно сделанные адаптеры. Поделитесь, плз.

Когда через Аякс посылаю запрос Cache: data: в формате JSON. Он понимает данные ввиде: "имя":"значение". Но не понимает массивы.

P.S. Если вопрос не слишком корректен не пинайте сильно, пожалуйста. Думаю смысл вопроса понятен.
5 июн 12, 09:23    [12665539]     Ответить | Цитировать Сообщить модератору
 Re: CSP. JSON.  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13295
Darkhan Darkhan, чем провинились гипперэвенты? Почему не используешь их?
5 июн 12, 09:41    [12665613]     Ответить | Цитировать Сообщить модератору
 Re: CSP. JSON.  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3120
Блог
Darkhan Darkhan,

Bill McCormick
If all you want is to mess with JSON then you can use the lowlevel APIs in the JSON Provider class. There are functions to convert arrays or objects in to JS that will instantiate a JSON object. And there are others that will take a JSON object from JS and convert it to an array in memory in COS. If that is all you are after have at it.

Источник: zen.component on csp.page
%ZEN.Auxiliary.jsonProvider
5 июн 12, 09:44    [12665624]     Ответить | Цитировать Сообщить модератору
 Re: CSP. JSON.  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2732
ZEN JSON, работает только в одну сторону, и выводит JSON в текущий поток
попробуйте это, у себя использую его.
5 июн 12, 09:53    [12665669]     Ответить | Цитировать Сообщить модератору
 Re: CSP. JSON.  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 945
DAiMor, почему только в одну сторону? В коде класса %ZEN.Auxiliary.jsonProvider есть внутренние методы %ObjectToJSON и %ParseJSON. Правда нет уверенности, что реализация совпадает со стандартом
5 июн 12, 10:44    [12666093]     Ответить | Цитировать Сообщить модератору
 Re: CSP. JSON.  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 945
Darkhan Darkhan, кстати метод %ArrayToJSON там тоже есть
5 июн 12, 10:46    [12666113]     Ответить | Цитировать Сообщить модератору
 Re: CSP. JSON.  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3120
Блог
Ещё много методов "Low Level JSON Support" можно найти в файле zenCSLM.js.
5 июн 12, 11:06    [12666325]     Ответить | Цитировать Сообщить модератору
 Re: CSP. JSON.  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3120
Блог
Документация
  • The Zen <jsonProvider> component provides a way to transport object data between a server and client, or between client and server, using JavaScript Object Notation (JSON) format.
    Источник: Zen JSON Component

  • И ещё (ссылку приводил выше):
    The jsonProvider component provides a way to transport object data between a server and client (and vice versa) using JavaScript Object Notation (so-called JSON format).
  • 5 июн 12, 11:16    [12666441]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    Darkhan Darkhan
    Member

    Откуда:
    Сообщений: 22
    Всем спасибо за отзывчивость. Сейчас рассмотрю предложенные варианты.

    Но мне нужно использовать это в CSP (не ZEN).
    5 июн 12, 11:25    [12666528]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    krvsa
    Member

    Откуда: г Волжский
    Сообщений: 13295
    Darkhan Darkhan
    Но мне нужно использовать это в CSP (не ZEN).

    Так чем не угодили гиппер эвенты?
    5 июн 12, 13:34    [12667778]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    DAiMor
    Member

    Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
    Сообщений: 2732
    krvsa
    Darkhan Darkhan
    Но мне нужно использовать это в CSP (не ZEN).

    Так чем не угодили гиппер эвенты?

    гипер евенты много чем могут не угодить, да и связь какая между JSON и HyperEvent ?

    для гипер евентов нужно, держать настроенной область csp, а когда для безопасности хочется все прикрыть приходится выделываться.
    при переходе с 2008 на 2010. возникла проблема, клиентам приходилось вымудрятся с настройкой IIS (Apache), да и мне самому на разработческой машине. настраивать так чтобы не пересекалась папка CSP для разных версий Cache, так как гиперевенты там не совместимы. И у меня в своем приложении тоже есть желание напрочь отказаться от использования гиперевентов.
    а еще сложность отладки, сложно понять по вызову гиперевента куда он все таки уйдет (класс, метод)
    в общем я для себя решил что гиперевенты-зло, и ни кому бы не советовал их использовать.
    5 июн 12, 13:44    [12667878]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    krvsa
    Member

    Откуда: г Волжский
    Сообщений: 13295
    DAiMor
    в общем я для себя решил что гиперевенты-зло, и ни кому бы не советовал их использовать.

    Х/з за что ты так на них жлобанул...
    5 июн 12, 13:57    [12668024]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    krvsa
    Member

    Откуда: г Волжский
    Сообщений: 13295
    DAiMor
    связь какая между JSON и HyperEvent ?

    Суть одна... Передача/получение данных.
    5 июн 12, 14:00    [12668062]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    DAiMor
    Member

    Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
    Сообщений: 2732
    krvsa
    DAiMor
    связь какая между JSON и HyperEvent ?

    Суть одна... Передача/получение данных.

    тогда встречный вопрос,
    как организовать передачу/возврат гиперевентами сложных структур данных:
    объект с несколькими свойствами, некоторые свойства которого могут быть массивами?
    и еще чтобы было просто получить на любой из сторон (сервер/клиент), удобный формат для обработки
    5 июн 12, 15:15    [12668867]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    Блок А.Н.
    Member

    Откуда: Новосибирск
    Сообщений: 3811
    Не самый лучший способо, наверно, но я записью в текущее устройство вывода внутри гиперевента формирую яваскрипт.
    5 июн 12, 15:49    [12669133]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    kolesov
    Member

    Откуда: Владивосток
    Сообщений: 799
    DAiMor
    как организовать передачу/возврат гиперевентами сложных структур данных:
    объект с несколькими свойствами, некоторые свойства которого могут быть массивами?
    и еще чтобы было просто получить на любой из сторон (сервер/клиент), удобный формат для обработки


    Я делаю так.
    С клиента передаю на сервер (гиперивентом) указатель на объект DOM (js).
    Методом сервера (посредством &js<>) наполняю мой переданный js объект данными и поведением любой сложности, доступной в рамках js и DOM.
    Возвращаю на клиент "пусто" (или ошибку, если что-то пошло не так).

    В итоге, сразу после выполнения метода на стороне сервера имею на клиенте объект, содержащий сколь угодно сложную структуру (к примеру со свойством, представляющим из себя массив объектов, каждый из которых содержит набор массивов данных и т.д. и т.п. + измененное в соответствии с инструкциями сервера поведение объекта на странице - новые и измененные методы).

    ЗЫ: Это не к тому, что JSON - плохо. Скорее наоборот - очень удачная идея, считаю. Так же как и вообще REST, который уже кажется всем показал, как нас смешно развели когда-то с xml, soap, wsdl etc. Ведь повелись в свое время - как кролики. Нет бы стандарты читать и использовать ;) И вообще, вот это "Суть одна... Передача/получение данных." наводит на размышления о том, почему клавиш 104, монитор квадратный, и рук две - "суть"-то одна - никем не доказано, что треугольный монитор не дает возможности работать с гуи... но, почему-то таковых не наблюдается, а вот изыски в изготовлении софта, в т.ч. способов "передачи/получения данных", изобилуют ;) Так что, имхо, суть далеко не одна...
    5 июн 12, 15:50    [12669142]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    servit
    Member

    Откуда: г. Кишинёв, Республика Молдова
    Сообщений: 3120
    Блог
    Darkhan Darkhan
    Всем спасибо за отзывчивость. Сейчас рассмотрю предложенные варианты.

    Но мне нужно использовать это в CSP (не ZEN).

    doublefint привёл некоторые методы из класса %ZEN.Auxiliary.jsonProvider, которые можно вызывать из CSP, например:
    + Пример на ZEN
    Class SqlRu.test Extends %ZEN.Component.page
    {

    /// Comma-separated list of additional JS include files for the page.
    Parameter 
    JSINCLUDES As STRING = "zenCSLM.js";

    XData Style
    {
    <
    style type="text/css">
    /* establish size of finder */
    #finder {
      border: 1px solid black;
      width: 900px;
      height: 400px;
      overflow-x: auto;
      overflow-y: hidden;
      background: rgb(180,190,200);
    }

    /* fix width/height of each finder column */
    .finderColumn {
      width: 300px;
      height: 400px;
    }
    </
    style>
    }

    XData Contents [ XMLNamespace "http://www.intersystems.com/zen" ]
    {
    <
    page xmlns="http://www.intersystems.com/zen" title="" height="100%">
    <
    jsonProvider id="json" OnGetArray="GetFinderArray"/>
    <
    finderPane id="finder" ongetdata="return zen('json').getContentObject();"/>
    <
    button caption="test" onclick="zenPage.test();"/>
    </
    page>
    }

    ClientMethod test() [ Language = javascript ]
    {
      zenAlert(ZLM.jsonEncode(zen(
    'json').getContentObject()));
    }

    /// Provide the source data (as an array) that will drive the finder.
    Method 
    GetFinderArray(
      
    ByRef pParameters,
      
    Output pMetaData,
      
    Output pDataAs %Status
    {
      
    // The MetaData list specifies the names of the properties of the 
      // JavaScript objects and the order in which they appear within
      // nodes of the data array.
      
    Set pMetaData = $LB("name","title","supervisor","phoneNo")

      
    // create a random org chart
      
    Set d = 0
      
    For tDept = "Sales","Marketing","Engineering","HR","Finance" {
        
    // add top-level entry for each department
        
    Set d = d + 1
        
    Set pData(d) = $LB(tDept) // name, but no other properties

        // add executive to each dept
        
    Set tVPName = ##class(%PopulateUtils).Name()
        
    Set pData(d,1) = $LB(tVPName,"Vice President, "_ tDept)

        
    // add 2nd level managers
        
    For n = 1:1:($R(10)+2) {
          
    Set tMgrName = ##class(%PopulateUtils).Name()
          
    Set pData(d,1,n) = $LB(tMgrName,"Manager",tVPName)

          
    // add workers
          
    For w = 1:1:($R(25)+2) {
            
    Set tWkrName = ##class(%PopulateUtils).Name()
            
    Set tTitle = ##class(%PopulateUtils).Title()
            
    Set pData(d,1,n,w) = $LB(tWkrName,tTitle,tMgrName)
          
    }

        }
      }
      
    Quit $$$OK
    }

    }
    + Аналог на CSP
    <CSP:CLASS INCLUDES="%callout">
    <
    html>
    <
    head>
    <
    title></title>
    <
    script type="text/javascript" src="zenutils.js"></script>
    <
    script type="text/javascript" src="zenCSLM.js"></script>

    <
    script language="cache" method="GetFinderArray" arguments="&pMetaData,&pData" returntype="%Status">
      
      
      
    new d,tDept,tVPName,n,tMgrName,tWkrName,tTitle
      
      
    // The MetaData list specifies the names of the properties of the 
      // JavaScript objects and the order in which they appear within
      // nodes of the data array.
      
    Set pMetaData = $LB("name","title","supervisor","phoneNo")

      
    // create a random org chart
      
    Set d = 0
      
    For tDept = "Sales","Marketing","Engineering","HR","Finance" {
        
    // add top-level entry for each department
        
    Set d = d + 1
        
    Set pData(d) = $LB(tDept) // name, but no other properties

        // add executive to each dept
        
    Set tVPName = ##class(%PopulateUtils).Name()
        
    Set pData(d,1) = $LB(tVPName,"Vice President, "_ tDept)

        
    // add 2nd level managers
        
    For n = 1:1:($R(10)+2) {
          
    Set tMgrName = ##class(%PopulateUtils).Name()
          
    Set pData(d,1,n) = $LB(tMgrName,"Manager",tVPName)

          
    // add workers
          
    For w = 1:1:($R(25)+2) {
            
    Set tWkrName = ##class(%PopulateUtils).Name()
            
    Set tTitle = ##class(%PopulateUtils).Title()
            
    Set pData(d,1,n,w) = $LB(tWkrName,tTitle,tMgrName)
          
    }

        }
      }
      
      
    /*
      
      или
      
      Set pMetaData = $LB("name","rank","serialNo")
      Set pData(1) = $LB("Smith","Captain","444-33-2222")
      Set pData(1,1) = $LB("Jones","Corporal","333-22-3333")  
      */
      
    Quit $$$OK
    </script>

      <
    script language="cache" method="SrvTest" returntype="%String">
      
    new format,tIO,tXDEV,export,tChunk
      
      
    do ..GetFinderArray(.pMetaData,.pData)
      
      
    // собираем в строку всё, что выводится через write
      
      
    set tIO=$IO,tXDEV="|XDEV|"_+$JOB,$ZT="Trap"
      
    Do {
        
    /// For $$$IsUnicode use UTF-8
        
    Open tXDEV:($ZF(-6,$$$XSLTLibrary,12):"":"S":/HOSTNAME="XSLT":/IOT=$S(($zcvt($get(format),"L")[",utf8")||$$$IsUnicode:"UTF8",1:"RAW"):/IBU=16384:/OBU=16384)
        
    Use tXDEV
        
        
    Quit:$$$ISERR(##class(%ZEN.Auxiliary.jsonProvider).%ArrayToJSON(.pMetaData,.pData))
        
        
    // Flush any remaining output
        
    Write *-3
        
        
    // Now read back a string (up to the maximum possible length, 32k or ~4MB for long strings)
        
    Set export = ""
        
    While (1) {
          
    #dim tChunk As %String
          
    Read tChunk:0
          
    Quit:'$L(tChunk)
          
    Set export = export _ tChunk
        
    }
        
      } 
    While (0)

    :
    Exit
      
    Close tXDEV
      
    Use tIO
      
    Quit export
    :
    Trap
      
    Set $ZT=""
      
    Goto Exit
    </script>

    <
    script type="text/javascript">
    function test()
    {
      
    var str=#server(..SrvTest())#;
      
    var obj=ZLM.jsonParseObject(str);
      zenAlert(
    "str=",str);
      zenAlert(
    "obj=",obj);
      zenAlert(
    "name=",obj.obj.children[0].name);

      
    /*
      
      можно ещё так
      
      var str2=ZLM.jsonEncode(obj,false);
      zenAlert("str2=",str2);
      */
    }
    </
    script>

    </
    head>
    <
    body>
      <
    button onclick="test();">test</button>
    </
    body>
    </
    html>

    PS: в обратную сторону, думаю, справитесь самостоятельно.
    5 июн 12, 17:57    [12670293]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 945
    DAiMor
    тогда встречный вопрос,
    как организовать передачу/возврат гиперевентами сложных структур данных:
    объект с несколькими свойствами, некоторые свойства которого могут быть массивами?

    Передачу, например, так:
    +

    <!DOCTYPE html>
    <html><head><title>HyperEvent</title></head><body>
    <button type="button" id="call">#call#</button>
    <button type="button" id="server">#server#</button>
    <script type="text/javascript">
    var $g=function(id){return document.getElementById(id) || "" };
    var $bind=("v"=="\v") ? function(o,e,h){ o.attachEvent("on"+e,h)} : function(o,e,h){o.addEventListener(e,h,false);};
    
    window.alertType=function( arg ){
    		alert( typeof( arg ) + " = " + arg  );
    };
    
    $bind(window,"load",function(){
    		
    		$bind( $g("call"), "click", function(){
    				#call(..wNowJS("window.parent.alertType"))#
    		});
    		
    		$bind( $g("server"), "click", function(){
    				alertType( eval(#server(..gNowJS())#) );
    		});
    	
    });
    
    </script></body></html>
    <script runat="server" language="cache" method="wNowJS" arguments='jsfunc:%String="alert"' returnType="%String">
     w ";",jsfunc,"(",..gNowJS(),");"
     Q ""
    </script>
    <script runat="server" language="cache" method="gNowJS" returnType="%String">
     Q "{now: ['"_$zd($zu(188),3)_"'], status: true }"
     </script>
    


    Возврат с помощью jsonProvider
    5 июн 12, 19:10    [12670711]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    krvsa
    Member

    Откуда: г Волжский
    Сообщений: 13295
    DAiMor
    тогда встречный вопрос,
    как организовать передачу/возврат гиперевентами сложных структур данных:
    объект с несколькими свойствами, некоторые свойства которого могут быть массивами?

    Тут можно вспомнить старинный анекдот:
    - Доктор, когда я делаю вот так (сгибается в немыслемую позу), у меня сильно болит вот тут...
    - Не делайте так!

    Любое большое и сложное можно разбить на много, много простых и маленьких...
    6 июн 12, 08:27    [12672078]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    Блок А.Н.
    Member

    Откуда: Новосибирск
    Сообщений: 3811
    krvsa,

    Минусы:
    - много обработки на клиенте,
    - много обращений к серверу, которые будут нагружать шлюз.
    6 июн 12, 08:39    [12672103]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    DAiMor
    Member

    Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
    Сообщений: 2732
    krvsa
    DAiMor
    тогда встречный вопрос,
    как организовать передачу/возврат гиперевентами сложных структур данных:
    объект с несколькими свойствами, некоторые свойства которого могут быть массивами?

    Тут можно вспомнить старинный анекдот:
    - Доктор, когда я делаю вот так (сгибается в немыслемую позу), у меня сильно болит вот тут...
    - Не делайте так!

    Любое большое и сложное можно разбить на много, много простых и маленьких...

    эмм, что может быть проще
    на клиенте
    var ask = JSON.stringify(obj) // получили из любого сложного объекта JSON строку которую можно передать на сервер
    var obj = JSON.parse(reply)  // получили из ответа сервера в формате JSON, любой сложный объект
    

    на сервере
    set obj = ##class(JSON).Decode(ask) // Получим объект Cache, с удобной многомерной структурой типа %ArrayOfDataTypes(объект со свойствами) или %ListOfDataTypes(массив)
    set reply = ##class(JSON).Encode(obj) // сформируем JSON ответ, браузеру
    
    6 июн 12, 10:09    [12672359]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    krvsa
    Member

    Откуда: г Волжский
    Сообщений: 13295
    DAiMor
    эмм, что может быть проще

    Выглядит не плохо...
    6 июн 12, 11:53    [12673325]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 945
    krvsa, *(если IE >= 8 ;)
    6 июн 12, 12:56    [12673864]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 945
    krvsa, вот тут подробнее
    6 июн 12, 13:02    [12673905]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    krvsa
    Member

    Откуда: г Волжский
    Сообщений: 13295
    doublefint, я пока обходился и без этого...
    Но на заметочку возьму конечно.
    6 июн 12, 13:23    [12674085]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    Шваров Евгений
    Member

    Откуда:
    Сообщений: 851
    Класс по работе с JSON от Йонатана Грабера на Github.
    10 дек 12, 03:29    [13604082]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    servit
    Member

    Откуда: г. Кишинёв, Республика Молдова
    Сообщений: 3120
    Блог
    Шваров Евгений
    Класс по работе с JSON от Йонатана Грабера на Github.
    Это будет полезно скорее для старых версий СУБД.
    В новых версиях уже есть встроенная поддержка JSON (уже приводилось).

    PS: с версии 2013.1 появилось ещё больше улучшений: можно почитать раздел JSON Improvements.
    10 дек 12, 10:07    [13604521]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 945
    Еще вот тут

    И еще вопрос по 2013.1 - возможно ли это новое счастье
    Do $zutil(96,18,2,"JSML")
    перенести на предыдущие версии?
    27 дек 12, 18:15    [13696789]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    servit
    Member

    Откуда: г. Кишинёв, Республика Молдова
    Сообщений: 3120
    Блог
    doublefint,

    Судя по комментариям в коде, должно работать с версии 2007.1 и выше.
    Проверил на 2012.2.1(705) - работает.
    27 дек 12, 18:55    [13696915]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 945
    servit - спасибо, с моей стороны вопрос был некорректный.
    Я надеялся не увидеть
    (""""_$Replace($ZCVT(%str,"O","JS"),"\'","'")_"""")
    

    Но, "чудес не бывает" © A.Грачев
    28 дек 12, 09:22    [13698611]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    servit
    Member

    Откуда: г. Кишинёв, Республика Молдова
    Сообщений: 3120
    Блог
    doublefint,

    Думаю, чуда действительно не произойдёт, если об этом не написать в WRC.
    Вряд ли изменение одного макроса в %ZEN.Utils.INC вызовет проблемы у разработчиков.
    doublefint
    Я надеялся не увидеть
    А что надеялись увидеть?
    28 дек 12, 10:23    [13698974]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 945
    servit, что-то вроде $zcvt(str,"O","JSON")
    28 дек 12, 12:27    [13699851]     Ответить | Цитировать Сообщить модератору
    Между сообщениями интервал более 1 года.
     Re: CSP. JSON.  [new]
    ilson
    Member

    Откуда:
    Сообщений: 16
    Здравствуйте, хотелось бы уточнить про %CSP.REST. В карте маршрутов аргументы в URL обозначаются так [:id]. Пример: [ GET /company/:id/car/:number], метод, который обрабатывает запрос принимает 2 параметра GetCmpCar(cmpId, carNum).

    Так получим все книги [ GET /book ].
    А как получить не все книги, а по условию?
    Что-то вроде [ GET /book?year=1980&genre=Drama ].

    Заметил в методе Page класса %CSP.REST такие вот строки, т.е. отбрасывается всё после [?]
     #; Ensure that any query string is not taken into account
     
    Set tURL=$Piece(tURL,"?")
     
    #; Dispatch the request
     
    Do ..DispatchRequest(tURL,%request.Method)
    Как можно извернуться?
    Делать так? [ GET /book/:q ], разбирать уже самому q на параметры в методе, который запрос обрабатывает.
    Пример: [ GET /book/year=1980&genre=Drama ].
    Или есть какой-то другой способ?
    18 авг 14, 19:26    [16458621]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 945
    ilson, в вызываемом методе у вас будет доступ к переменной %request. В ней все по "полочкам":
     merge args %request.Data zw args
    18 авг 14, 21:37    [16459005]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 945
    ilson, только GET /book?year=1980&genre=Drama
    18 авг 14, 21:39    [16459016]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    ilson
    Member

    Откуда:
    Сообщений: 16
    Спасибо, doublefint. Отличное решение:)
    18 авг 14, 21:58    [16459129]     Ответить | Цитировать Сообщить модератору
     Re: CSP. JSON.  [new]
    eduard93
    Member

    Откуда:
    Сообщений: 170
    ilson

    Как вариант на клиенте собираете JSON с необходимыми условиями и передаёте его в теле запроса. На стороне Cache преобразуете его в объект, и работаете с этим объектом. Это позволяет избавиться от параметров в URL:
     do ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(%request.Content,"ClassName",.obj,1)
    Также часто встречал подобный подход:
    На основные юзкейсы пишутся запросы GET /query/book/:year:/genre и.т.д. сколько нужно.
    И на каждый возвращаемый тип по запросу GET /book/:query в который условия передаются параметрами (в теле запроса или по url)
    19 авг 14, 03:11    [16459904]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: 1 2      [все]
    Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить