第八章 通过 REST 使用 Web 会话(Sessions)

68 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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;

然后重新编译这个类

如果 UseSession1IRIS 跨多个 REST 服务调用保留一个 Web 会话。如果参数为 0(默认值), IRIS 为每个 REST 服务调用使用一个新的 Web 会话。

注意:当重新编译规范类时,UseSession 参数被复制到调度类,这会导致行为的实际变化。

  • 系统宏一般指%RegisteredObject的宏,宏可用于%RegisteredObject的所有子类。
    • 对于与状态相关的宏,名称为:%occStatus.inc
    • 对于与消息相关的宏,名称为:%occMessages.inc

%occStatus.inc内的宏

  • OK - %Status返回正确结果时创建的代码,也可用于Boolean值返回。
  • YES - 返回Booleantrue类型。
  • NO - 返回Booleanfalse类型。
/// 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: 这是一条错误信息!