RESTでセッション共有化する方法
これは InterSystems FAQ サイトの記事です。
REST アプリケーションはステートレスであることが想定されています。
しかし、複数の REST 呼び出し間でデータを保持したい場合などの理由で、Webセッションを使用したい場合は、UseSession パラメータを使用することができます。
以下のように、Web アプリケーションのディスパッチクラスとして定義された %CSP.REST のサブクラスでUseSession パラメータを指定することで、CSPと同じようにWebセッションを使用することが可能となります。
Class REST.MyServices Extends %CSP.REST
{
Parameter UseSession As Integer = 1;
詳細は以下のドキュメントをご覧ください。
以下は、UseSession パラメータを使用した簡単なサンプルになります。最初に、2つのクラスを作成してください。
*
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 } }
*
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() { $.ajax({ type:'GET', dataType:'json', url:'/csp/user/rest/test/', 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 ボタンを押す