携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
第八章 通过 REST 使用 Web 会话(Sessions)
可以启用 REST 服务以使用 Web 会话。本章描述了为什么以及如何做到这一点。
介绍
REST 的目标之一是无状态;也就是说,从一个 REST 调用到下一个,没有任何知识存储在服务器上。跨 REST 调用保留 Web 会话会破坏无状态范式,但可能希望保留 Web 会话的原因有两个:
- 最小化连接时间——如果每个
REST调用创建一个新的Web会话,它需要在服务器上建立一个新的会话。通过保留Web会话,REST调用可以更快地连接。 - 跨
REST调用保留数据 — 在某些情况下,可能需要跨REST调用保留数据才能有效满足业务需求。
启用 REST 服务以使用 Web 会话
要启用对多个 REST 调用使用单个 Web 会话,请在规范类中将 UseSession 参数设置为 1。例如:
Parameter UseSession As Integer = 1;
然后重新编译这个类
如果 UseSession 为 1, IRIS 跨多个 REST 服务调用保留一个 Web 会话。如果参数为 0(默认值), IRIS 为每个 REST 服务调用使用一个新的 Web 会话。
注意:当重新编译规范类时,UseSession 参数被复制到调度类,这会导致行为的实际变化。
- 系统宏一般指
%RegisteredObject的宏,宏可用于%RegisteredObject的所有子类。- 对于与状态相关的宏,名称为:
%occStatus.inc。 - 对于与消息相关的宏,名称为:
%occMessages.inc。
- 对于与状态相关的宏,名称为:
%occStatus.inc内的宏
OK-%Status返回正确结果时创建的代码,也可用于Boolean值返回。YES- 返回Boolean值true类型。NO- 返回Boolean值false类型。
/// w ##class(M.M65).SystemMacros({})
ClassMethod SystemMacros(obj) As %Boolean
{
q:($isobject(obj)) $$$YES
q $$$NO
}
USER> w ##class(M.M65).SystemMacros(1)
0
USER> w ##class(M.M65).SystemMacros({})
1
ERROR(sc)- 创建%STATUS对象错误信息。ISERR (sc)- 如果%Status代码是错误代码,则ISERR宏将返回True。否则,它返回FALSE。ISOK(sc)- 如果%Status代码是正确结果,则ISOK宏将返回True。否则,它返回FALSE。GETERRORCODE(sc)- 返回%Status错误代码值。
/// d ##class(M.M65).SystemMacros1()
ClassMethod SystemMacros1() As %Status
{
s sc = $$$ERROR($$$GeneralError,"这是一条错误信息!")
if $$$ISERR(sc) {
w $System.Status.GetOneErrorText(sc),!
}
if '$$$ISOK(sc) {
w $$$GETERRORCODE(sc),!
}
}
USER>d ##class(M.M65).SystemMacros1()
错误 #5001: 这是一条错误信息!
5001
ThrowOnError(sc)- 判断sc是否为错误代码。如果是 将执行抛出操作,向异常处理程序抛出%Exception.StatusException类型的异常。
/// d ##class(M.M65).SystemMacros2()
ClassMethod SystemMacros2() As %Status
{
s sc = $$$ERROR($$$GeneralError,"这是一条错误信息!")
$$$ThrowOnError(sc)
}
/// $zt方式捕捉异常
/// w ##class(M.M65).Main()
ClassMethod Main() As %Status
{
s $zt = "Error"
d ..SystemMacros2()
q "返回正确数据"
Error
q "捕捉thorw异常:" _ $ze
}
USER>w ##class(M.M65).Main()
捕捉thorw异常:<THROW>zSystemMacros2+2^M.M65.1 *%Exception.StatusException 错误 #5001: 这是一条错误信息!