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つのクラスを作成してください。
* 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() {
$.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 ボタンを押す
ディスカッション (0)0