記事
Megumi Kakechi · 2021年3月10日 3m read

RESTでセッション共有化する方法

これは InterSystems FAQ サイトの記事です。

REST アプリケーションはステートレスであることが想定されています。

しかし、複数の REST 呼び出し間でデータを保持したい場合などの理由で、Webセッションを使用したい場合は、UseSession パラメータを使用することができます。

以下のように、Web アプリケーションのディスパッチクラスとして定義された %CSP.REST のサブクラスでUseSession パラメータを指定することで、CSPと同じようにWebセッションを使用することが可能となります。

Class REST.MyServices Extends %CSP.REST
{
 Parameter UseSession As Integer = 1;


詳細は以下のドキュメントをご覧ください。

REST での Web セッションの使用


以下は、UseSession パラメータを使用した簡単なサンプルになります。最初に、2つのクラスを作成してください。


REST.SessionTest.cls

Class REST.SessionTest Extends %CSP.REST
{

Parameter UseSession As Integer = 1;

XData UrlMap
  {
    <Routes>
      <Route Url="/test/" Method="GET" Call="test"/>
    </Routes>
  }

ClassMethod test() As %Status
  {
    write "{""SessionId"":"""_%session.SessionId_"""}"
    quit $$$OK
  }
}


REST.test.cls

Class REST.test Extends %CSP.Page
{
ClassMethod OnPage() As %Status
  {
  &html<
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <script type="text/javascript" src="http://code.jquery.com/jquery-2.2.4.js"></script>
<script type="text/javascript">
function go() {
   var buf= {"ID1":0,"ID2":1,"ID3":2,"ID4":3};
   $.ajax({
     type:'GET',
     dataType:'json',
     url:'/csp/user/rest/test/',
     data: {"ID1":0,"ID2":1,"ID3":2,"ID4":3},
     success:function(data) {
       ans = '';
       for(var i in data) {
           ans = ans + '\n' + JSON.stringify(data[i]);
       }
       alert(ans);
     }
   });
  return;
  }
  </script>

      </head>
      <body>
        <form name="xxx" method="post" action="">
          <input type="button" name="test" onclick="go();" value="push" /></p>
        </form>
        Session ID: #(%session.SessionId)#<br>
      </body>
    </html>


サンプルの使用方法は以下になります。

1. 上記2つのクラスをUSERネームスペースに作成し、コンパイルする

2. ウェブアプリケーション /csp/user/rest を作成、
     ディスパッチクラスに REST.SessionTest を設定、
     セッションCookieパスを /csp/user に変更して保存

 

3. ブラウザで /csp/user/REST.test.cls を開いて、push ボタンを押す

 

 

10
0 0 0 193
Log in or sign up to continue