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