具体实施方式
本文描述了并在附图中示出了主机不可知集成和互操作系统。该主机不可知集成和互操作系统包括开放平台接口和相关联的约定,所述开放平台接口和相关联的约定定义主机和运行在外部应用服务器上的服务应用的角色和它们之间的直接操作,并允许主机发现并集成由服务应用所提供的功能。开放平台接口利用有限数目的容易实现的语义方法,所述方法允许主机暴露并集成使用来自标准用户代理的服务应用的主机支持的功能来查看、编辑、或以其他方式操纵文档的能力。该主机不可知集成和互操作系统使用访问令牌在主机处处理用户认证,并且使用轻量但是安全的证据密钥系统来建立主机和外部应用服务器之间的信任关系。
图1示出包括一个或多个主机102和一个或多个外部应用服务器104的示例性企业网络的一个实施例。用户106从客户端计算设备110经由用户代理108来访问主机102。主机102最一般地是将文档存储在文档存储系统126中并管理对用户106的许可的内容服务器。一般而言,主机102运行主机应用112,并且主机应用112的普通功能是通过主机用户接口114来处理的。主机应用112的普通功能中的至少一些涉及向用户提供对已存储的文档116的访问,该文档116被包含在内容存储126中并且旨在使用支持应用来被查看和/或编辑。主机102还提供使外部应用服务器104的服务对用户106可用的通用平台。换言之,主机102向外部应用服务器104提供接入点并且提供门户,用户106和外部应用服务器104通过所述门户来交互。共享通信接口定义并指导主机102与外部应用服务器104之间的文档动作。主机102还实现从外部应用服务器104接收通信的端点120。虽然主机102初始化包括外部应用服务器104的服务的场景,但主机102不调用外部应用服务器104。相反,外部应用服务器104展示所支持的功能,以使用回调来针对所支持的文档类型进行操作。
外部应用服务器104运行一个或多个基于web的服务应用118,该服务应用118使用户106能够从客户端计算设备110通过网络访问、查看、编辑以及可选地执行针对内容(即,文件或文档)的其他动作,并且执行文件夹(即,目录)管理,而不要求本地安装与特定文档类型一同工作所需的适当的应用。外部应用服务器104的动作和输出不是调用外部应用服务器的功能的主机102所专用的。每个服务应用118一般作为外部应用服务器104上的服务来运行。外部应用服务器104使用开放平台接口来集成主机102并与主机102通信。通过服务应用118,外部应用服务器104提供与所选文件类型的文档一同工作的必要动作和功能。处理各种文档类型的服务应用118的示例包括用于与文字处理文档、电子表格、笔记和演示一起工作的标准(即,本地安装的)应用的基于web的伙伴。每个服务应用118所提供的动作通常专用于所选文件类型或与文件夹管理有关。服务应用118所提供的核心动作是查看和编辑文档。在各实施例中,服务应用118提供一个或多个附加动作,这些动作包括但不限于:重新格式化文档以在移动设备上查看、创建新文档、转换文档、嵌入文档、以及广播文档。
主机102是能够使用用户代理108(诸如客户端计算设备110的web浏览器)通过网络来访问的在线服务器应用。外部应用服务器104所提供的功能由主机102来消费,并且使其对用户106可用。合适的主机系统的示例包括但不限于允许基于web的访问的邮件系统(例如,Microsoft Exchange)、统一通信系统(例如,IBM LotusMicrosoft和)、和内容和/或文档管理系统(例如,IBM Lotus和Microsoft)。作为内容服务器,主机102存储用户的数据(即,文档)并发起涉及外部应用服务器104查看、编辑或以其他方式操纵用户的数据的场景。在开放操作接口下,主机102按照外部应用服务器104的请求来处理文件系统操作。主机102的其他责任通常包括在用户级处理对文档的访问控制以及用于外部应用服务器104的许可实施。
主机102实现在客户端计算设备110上的用户代理中显示的服务应用包装(wrapper)122。服务应用包装122是由主机102生成的web页和/或帧(例如,内联帧),所述web页和/或帧担当服务应用118的输出的视口(即,基于web的用户界面)。服务应用包装122可选地包括内应用帧124,所述内应用帧显示服务应用118的用户界面页,同时服务应用包装122可选地呈现主机色度(chrome)(即,主机提供的外观和感觉)和导航控制。
当用户106为特定文档选择动作时,该动作由请求调用,该请求是为支持该文档类型的服务应用对服务应用入口URL(entry URL)做出的。该服务应用入口URL指向外部应用服务器104上的服务应用的地址。服务应用入口URL的基础最典型地是外部应用服务器104的地址。主机102通常通过服务应用包装122来生成与所选动作相关联的参数并将所述参数附加到服务应用入口URL。所述参数指定任务(例如,使用电子表格应用的内嵌编辑)和完成所请求的任务所需的数据。
主机102还实现并展示用于从外部应用服务器接收通信的主机端点120。主机端点120是web服务,该web服务理解使用开放平台接口所作的请求。开放平台接口的某些实施例排他性地使用安全传输协议(例如,HTTPS)来进行与主机端点120的通信以保护访问令牌和该文档的内容。在一个实施例中,主机端点120的URL是通过将主机端点web服务的位置附加到主机的域名来创建的。
尽管人工配置主机102来与外部应用服务器104集成是完全可能而且可接受的,然而开放平台接口的各实施例提供了自动化的外部应用服务器发现进程来完成此项任务。在开始外部应用服务器发现进程之前,不要求主机102具有关于外部应用服务器104的可用性或功能的任何知识。为了参与外部应用服务器发现进程,主机102必须理解开放平台接口和发现约定。在完成外部应用服务器发现进程之后,主机102的行为基于外部应用服务器104的可用性和功能而改变。
在发现过程期间,主机102学习外部应用服务器104所支持的文件格式和开放接口协议方法(即,动词)。发现进程开始于主机102发出发现请求并且接收发现响应消息,该发现响应消息包含描述该外部应用服务器所支持的功能的发现元数据(即,外部应用服务器的属性)。发现元数据根据开放接口协议的约定来格式化,并且包含由所述约定所指定的信息。在各个实施例中,发现元数据包含诸如外部应用的标识符、对外部应用的描述、文件扩展名、与该文件扩展名相关联的动作、主机的任何开放接口协议实现要求(例如,功能集)、负责处理动作的外部应用的位置、和/或与该文件扩展名相关联的文档的mime类型、以及参与安全方案的公共证据密钥的副本等信息。在一个实施例中,支持应用的人类和机器可读标识符(例如,串值(string value)与每一文件类型/动作对相关联。主机102消费发现元数据并将外部应用服务器104的功能作为主机配置的一部分注册。
每一动作由开放接口协议的约定来定义。主机102基于此时主机102所理解的开放协议接口的约定来选择利用或忽略各个动作。在一个实施例中,主机102验证了在注册成对的文件类型和动作之前,它支持对动作的要求。如果主机102不支持该动作和/或满足托管要求,则不注册成对的文件类型和动作。具体而言,在一些实施例中,主机使用“要求”属性,其指定用于滤除主机无法支持的动作的开放接口协议实现要求。换言之,如果主机不识别或不理解“要求”属性值中列出的全部字段,或选择不支持开放接口协议的约定,则主机不注册(即实现)成对的文件类型和动作,并且不向用户提供该功能。
由主机对开放平台接口和相关联的约定的配置、功能、以及实现等级确定外部应用服务器对用户106可用的有效功能。如果主机102没有完全实现开放平台接口或不满足外部应用服务器104的某个功能的要求,则该功能对用户106不可用。更具体而言,如果主机102不公开对具体功能的支持,则外部应用服务器104抑制主机不能支持的任何特征。例如,当主机102不能保存文件的已更新副本时,外部应用服务器104不应当允许用户106编辑文档。
此外,发现元数据描述了在与每一动作相关联的外部应用入口URL中使用的参数。对于动作,服务应用入口URL参数由开放接口协议中的约定来指定。某些参数是必要的,而其他参数是可选的。如果主机不理解一个必要的参数,则主机不注册动作。相反,如果不理解可选的参数,则主机可以选择注册动作。在此情形中,与可选参数相关联的功能被简单地丢失,但是主机仍然能够提供具有与主机理解的一样多的功能的动作。
用这种方式来处理动作和参数的发现提供了开放平台接口所享用的稳健跨版本兼容性的基础。即便外部应用服务器的升级提供了主机所不支持或理解的新功能,主机仍继续与升级后外部应用服务器一起工作。主机简单地继续提供对它理解的功能的支持,并忽略它不理解的任何功能。
开放平台接口建立在已良好建立并且对大多数(即便不是全部)平台和操作系统常见的基础通信机制之上。开放平台接口为基本上所有通信所采用的基础通信机制是一种基本的请求-响应协议,诸如超文本传输协议(HTTP)或超文本传输协议安全(HTTPS)。事务通常是作为对具有为认证而附加的主机生成的访问令牌的统一资源定位符(URL)的标准HTTP请求而实现的。所有调用信息均被包含在该请求的URL、头部、以及主体(在必要时)中。换言之,该请求包装一组信息,诸如要操作的对象、要执行的操作、调用者所提供的可选证据、以及元数据的各种其他位。某些请求还包含主体,所述主体以与该操作相关联的交换(exchange)格式封装了数据。当存在主体时,主体中的数据表示封装中所描述的操作的有效载荷。相应地,恰好携带有效载荷的请求必须继续在请求-串/http头部中呈现所需的封装信息而不能使用该请求的主体作为替代传输机制。响应同样如此,尽管有更多有效载荷,因为将元数据有效载荷与不具有有效载荷和文件内容的请求相匹配的某些响应总作为响应主体中的有效载荷被传输。该开放平台接口客户端(即,外部应用服务器)所发送的请求可选地包括由该开放平台接口主机用来验证请求者的身份的证据头部。所有回复信息均被包含在该响应的URL、头部、以及主体(在必要时)中。这消除了对某些现有技术接口曾经需要的非常具体的元数据交换的需求。
请求或响应的基本格式通常包括用于携带通用信息和/或方法专用信息的一个或多个请求头部以及在需要时用于携带数据的可选的请求主体。此外,响应返回请求是否成功的状态码。该请求,和与该请求相关联的任何所需的和可选的参数一起,被寄送到主机或外部应用服务器的接入点或终止点的地址。以下讨论描述了开放平台接口的一个示例性实施例。该示例不是为了以任何方式限制由该开放平台接口所提供的特征和功能。
开放平台接口所使用的头部包括标准请求头部、标准响应头部、以及错误响应头部。此外,开放平台接口包括用于所选方法的专用附加头部。标准请求头部、标准响应头部、以及错误头部被用来处理诊断功能以及传递非该请求专用的接口级信息(即,通用信息)。错误响应头部与该响应所返回的状态码结合使用。状态码提供由开放平台接口定义的标准值,所述标准值指示请求是否成功,并且如果不成功,标识该请求所遇到的错误的类型。
标准请求头部指定外部应用服务器(即,调用者或接口客户端)的接口版本、外部应用服务器的机器名、以及用于为记录和/或调试目的而将来自客户端的日志与来自主机的日志同步并且允许外部应用服务器请求来自主机(即,响应者或接口服务器)的性能跟踪的相关标识符。标准响应头部指定主机的接口版本、主机的机器名、以及性能跟踪的输出(如果被请求)。由开放平台接口定义的响应码包括:指示成功/无错误的代码#200,指示文件是未知的或用户是未授权的的代码#404,指示资源锁不匹配、资源被另一接口锁定、或在PutRelativeFile (放入相对文件)请求中指定的文件名正被使用和覆盖操作未被要求的代码#409,指示文件大于最大预期大小的代码#412,指示文件太大的代码#413,指示服务器错误的代码#500,以及指示动词未被服务器/主机实现的代码#501。响应错误头部包括:当代码#500被返回时描述服务器错误的服务器错误头部,以及当代码#409被返回时,或者是指定使用开放平台接口所创建的锁的唯一标识符的锁头部,或者是指示目标资源上的锁不是使用开放平台接口创建的由另一接口锁定的标志(locked by another interfaceflag)。
开放平台接口识别请求或响应的主体中的两个不同内容类型。取决于请求,主体包含元数据或二进制数据。响应主体的内容类型取决于所作出的请求。调用者(即,外部应用服务器或服务应用)基于调用者所作出的请求来解释响应主体中的数据。基本数据互换或标记格式担当元数据的基础数据传输机制。在大多数实施例中,基本数据互换或标记格式既是机器可读又是人类可读的。开放平台接口的各实施例用于数据传输机制所使用的一种适当的对象注释格式是JavaScript对象注释(JSON);然而,可使用其他对象注释格式而不背离本发明的精神和范围。
主机通过针对服务应用入口URL对服务应用包装做出HTTP GET请求来开始事务(即,调用一动作)。在发起一动作时,主机提供元数据URL(即,回调URL或源URL)。该事务中的所有后续通信由该外部应用服务器发起。元数据URL是对主机端点的引用,其是在做出对主机的HTTP请求时该服务应用所使用的地址。HTTP请求被用于调用用于执行资源相关功能的主机侧方法。
开放平台接口定义用于执行以下功能中的一些或全部的有限数量的容易实现的和广泛支持的语义方法,这些功能包括但不限于:获得文件元数据(CheckFileInfo),获得文件夹元数据(CheckFolderInfo),获得文件的二进制内容(GetFile),保存文件的二进制内容(PutFile),保存文件的二进制内容的副本(PutRelativeFile),锁定文件(Lock),解锁文件(Unlock),续订(renew)对文件的锁(RefreshLock),解除锁定并重新锁定文件(UnlockAndRelock),执行本地虚拟应用(ExecuteCobaltRequest),执行远程虚拟应用(ExecuteCobaltRelativeRequest),枚举文件夹的内容(EnumerateChildren),以及删除文件(DeleteFile)。用于获得与文档相关联的元数据的方法和用于获得文档内容的方法被认为是该开放平台接口的核心方法。每个方法使用针对元数据URL或另一主机端点URL的对服务应用包装(通常是内帧)的HTTP请求来调用,并且包括唯一标识该方法的目标资源(例如,文件或文件夹)的资源标识符以及可选的作为请求参数的访问令牌。在大多数情况下,回调URL或者是元数据URL,或者是用于目标资源类型的内容URL。
CheckFileInfo请求是针对文件元数据URL做出的GET请求,并且支持标准请求头部。CheckFileInfo请求支持将访问令牌作为可选参数而包括在内。CheckFileInfo请求主体是空或被略去。所支持的CheckFileInfo错误码是代码#200、代码#404以及代码#500。CheckFileInfo响应支持标准响应头部,而CheckFileInfo响应主体包含对象注释格式的文件元数据。
核心文件元数据包括但不限于:指定在文件改变时改变的唯一且不重复的值的一个或多个文件版本,指定包括扩展名但不带路径的基本文件名、指定资源的所有者的唯一标识符的所有者标识符(用于扼流和一致散列化)、文件的当前版本的文件大小、以及包含用于高速缓存管理的文档内容的Base64编码的SHA256散列的文件散列码(SHA256散列)。可选文件元数据包括但不限于以下的一个或多个:指定外部应用服务器用于访问资源的地址的客户端URL、指定触发用户代理的本机下载功能的地址的下载URL、指定资源被关闭时服务应用包装的目标地址的关闭URL、指定主机提供的全屏查看页面的地址的全屏URL、指定主机提供的查看页面的地址的主机查看URL、指定主机提供的编辑页面的地址的主机编辑URL、指定用于该文档类型的主机的内嵌查看器的地址的主机内嵌查看URL(如果不同于主机查看URL的话)、指定用于该文档类型的主机的内嵌编辑器的地址的主机内嵌编辑URL(如果不同于主机编辑URL)、指示用户是否具有对该资源的写许可的写许可标志、指定该资源是否对所有用户只读的只读标志、指定该资源是否对所有用户可访问的公开标志、指定电子表格公式是否对用户可见的隐藏公式标志、指定主机是否支持文件保存操作的更新支持标志、指示主机是否支持文件锁定操作的锁定支持标志、指示主机是否支持虚拟应用(例如,Cobalt应用)的虚拟应用支持标志、指示主机是否支持文件系统操作(列出文件夹的内容、删除文件等)的容器支持标志、指定主机是否支持文件系统删除操作的删除标志、指示用于直接访问文件的内容(即,不使用主机端点内容URL)的地址的文件URL、指定用于显示主机的隐私策略的地址的隐私URL、以及指定显示主机的使用条款的使用条款URL。
CheckFolderInfo请求是针对文件夹元数据URL做出的GET请求,并且支持标准请求头部。CheckFolderInfo请求支持将访问令牌作为可选参数而包括在内。CheckFolderInfo请求主体是空或被略去。所支持的CheckFolderInfo错误码是代码#200、代码#404、代码#500以及代码#501。CheckFolderInfo响应支持标准响应头部,并且该响应主体包含对象注释格式的文件夹元数据。
核心文件夹元数据包括但不限于以下中的一个或多个:指定不带路径的文件夹名称的文件夹名称,以及所有者标识符。可选的文件元数据包括但不限于以下的一个或多个:客户端URL、关闭URL、指示文件夹是容器的文件分层结构支持标志、删除标志、用户写许可标志、公开标志、更新支持标志、锁定支持标志、虚拟应用支持标志、容器支持标志、主机查看URL、主机编辑URL、主机内嵌查看URL、主机内嵌编辑URL、隐私URL、以及使用条款URL。
GetFile内容请求是针对文件内容URL做出的GET请求。GetFile内容请求支持标准请求头部和指定文件的预期最大大小的可选的扩展的请求头部。GetFile内容请求支持将访问令牌作为可选参数而包括在内。GetFile内容请求主体是空或被略去。所支持的GetFile错误码是代码#200、代码#404、代码#412以及代码#500。GetFile响应支持标准响应头部以及指定响应中实际返回的文件的版本(以与由CheckFileInfo返回的形式相同的形式)的扩展的响应头部。GetFile响应主体包含二进制格式的文件内容。
PutFile请求是针对文件内容URL做出的POST请求。PutFile请求支持标准请求头部和指定文件的大小(必需的)、区分对同一URL做出的各种POST操作的覆盖标识符(例如,“PUT”)、以及可选的在保存操作中使用的文件锁的唯一标识符的附加的头部。PutFile请求支持将访问令牌作为可选参数而包括在内。PutFile内容请求主体包含二进制格式的文件内容。所支持的PutFile错误码是代码#200、代码#404、代码#409、代码#413、代码#500以及代码#501。PutFile响应支持标准响应头部。PutFile响应主体是空或被略去。
PutRelativeFile请求是针对文件元数据URL做出的POST请求。PutRelativeFile请求支持标准请求头部以及指定文件的大小、覆盖标识符(例如,“PUT RELATIVE”)、文件副本的文件名、以及是否准许盖写目标文件的附加的头部。PutRelativeFile请求支持将访问令牌作为可选参数而包括在内。PutRelativeFile请求主体包含二进制格式的文件内容。所支持的PutRelativeFile错误码是代码#200、代码#404、代码#413、代码#500、以及代码#501。PutRelativeFile响应支持标准响应头部。PutRelativeFile响应主体包含对象注释格式的副本的文件元数据。如果文件被成功创建,则文件元数据包括但不限于:文件副本的文件元数据URL、文件副本的主机查看URL、以及可选的文件副本的主机编辑URL。如果文件没有被成功创建,则文件元数据包括但不限于:指定替代文件副本文件名的建议文件名、指示具有在PutRelativeFile请求中提供的文件副本文件名的文件是否已经存在的文件存在标志、以及指示在PutRelativeFile请求中提供的文件副本文件名是否是合法文件名的非法文件名标志。
LockFile请求是针对文件元数据URL做出的POST请求。LockFile请求支持标准请求头部以及指定覆盖标识符(例如,“LOCK”)和要创建的文件锁的唯一标识符的附加头部。LockFile请求支持将访问令牌作为可选参数而包括在内。LockFile请求主体是空或被略去。LockFile错误码是代码#200、代码#404、代码#409、代码#500、以及代码#501。LockFile响应支持标准响应头部以及指定存在的锁的附加头部。LockFile响应主体是空或被略去。UnlockAndRelock请求是LockFile请求的变型,UnlockAndRelock请求仅包括指定要被移除的文件锁的唯一标识符的附加参数。
UnlockFile请求是针对文件元数据URL做出的POST请求。UnlockFile请求支持标准请求头部以及指定覆盖标识符(例如,“UNLOCK”)以及要移除的文件锁的唯一标识符的附加头部。UnlockFile请求支持将访问令牌作为可选参数而包括在内。UnlockFile请求主体是空或被略去。UnlockFile错误码是代码#200、代码#404、代码#409、代码#500、以及代码#501。UnlockFile响应支持标准响应头部。UnlockFile响应主体是空或被略去。
RefreshLock请求是针对文件元数据URL做出的POST请求。RefreshLock请求支持标准请求头部以及指定覆盖标识符(例如,“REFRESH_LOCK”)和要刷新的文件锁的唯一标识符的附加头部。RefieshLock请求支持将访问令牌作为可选参数而包括在内。RefreshLock请求主体是空或被略去。RefreshLock错误码是代码#200、代码#404、代码#409、代码#500、以及代码#501。RefreshLock响应支持标准响应头部。RefreshLock响应主体是空或被略去。
ExecuteCobaltRequest和ExecuteCobaltRelativeRequest请求是针对文件元数据URL做出的POST请求。ExecuteCobaltRequest和ExecuteCobaltRelativeRequest请求支持标准请求头部和指定文件内容的大小以及覆盖标识符(例如,“COBALT”)的附加头部。在ExecuteCobaltRelativeRequest请求的情况下,支持指定相对目标的附加头部。ExecuteCobaltRequest和ExecuteCobaltRelativeRequest请求支持将访问令牌作为可选参数而包括在内。ExecuteCobaltRequest和ExecuteCobaltRelativeRequest请求主体携带Cobalt格式的文件内容。所支持的ExecuteCobaltRequest和ExecuteCobaltRelativeRequest请求的错误码是代码#200、代码#409、代码#500以及代码#501。ExecuteCobaltRequest和ExecuteCobaltRelativeRequest响应支持标准响应头部。ExecuteCobaltRequest和ExecuteCobaltRelativeRequest响应主体携带二进制格式的虚拟应用的输出。ExecuteCobaltRequest和ExecuteCobaltRelativeRequest请求示出了开放平台接口如何包括封装功能,该封装功能允许根据需要将任意数据协议结合到开放平台接口中。开放平台接口标识对象并提供对该对象的访问,但是允许该对象利用客户端和主机两者均理解的任意数据交换格式。不要求开放平台接口理解任意数据交换格式。所封装的对象仅利用不同的覆盖头部并将其自身声明为在Check(检查)中可用。
EnumerateChildren请求是针对文件夹元数据URL做出的POST请求。EnumerateChildren请求支持标准请求头部,并且支持将访问令牌作为可选参数包括在内。EnumerateChildren请求主体是空或被略去。所支持的EnumerateChildren错误码是代码#200、代码#404、代码#500以及代码#501。EnumerateChildren响应支持标准响应头部。EnumerateChildren响应主体包含对象注释格式的资源元数据的集合。资源元数据包括但不限于:该资源的元数据URL、基本文件名或文件夹名、以及资源(如果是文件的话)的版本。
DeleteFile请求是对文件元数据URL做出的POST请求。DeleteFile请求支持标准请求头部和指定覆盖标识符(例如,“DELETE”)的附加的头部。DeleteFile请求支持将访问令牌作为可选参数而包括在内。DeleteFile请求主体是空或被略去。DeleteFile错误码是代码#200、代码#404、代码#409、代码#500、以及代码#501。DeleteFile响应支持标准响应头部。DeleteFile响应主体是空或被略去。
开放平台接口将信息权限管理(IRM)合并到外部服务应用中以仅供查看,以允许用户通过使用访问令牌和证据系统在信息权限管理限制的情况下打开文档。一个容易理解的场景关注向大的组发送公司机密信息。在此场景中,发送者需要将敏感信息传送到他或她的组织的员工,但是想要确保他们不转发该文档。外部服务应用担当这种场景的极佳的查看选项,因为用户不需要下载文档来打开它。此外,外部服务应用中的高速缓存机制将使此操作很快。然而,在没有信息权限管理支持的情况下,该场景被打破,而用户将要接收到错误对话框。
开放平台接口允许用户从主机检索(retrieve)受保护的文档。推荐客户端、主机和外部服务应用之间的所有通信是通过密码通信协议(诸如SSL或TLS)的,以防止攻击者获得用户的授权令牌。为了支持外部服务应用中的信息权限管理,CheckFileInfo合并三个附加参数:指示给定文件需要在浏览器中被保护的受保护文件标志、以及指定显示给用户的模板的名称以及描述的可选的IRM模板标识符。为了防止用户检索用户具有访问权的文档的未加密的副本,请求包括用只有外部服务应用知道的私钥签名的部分,而主机可选择拒绝没有按照期望提供证据的任何请求。在发现时证据密钥的提供是外部应用服务器对所有请求进行签名的承诺。主机可选择不发起与在发现时不提供证据的外部应用服务器的IRM会话。外部服务应用用当前私钥和旧私钥两者对请求签名。只有在可用其对外部服务应用的当前私钥或旧私钥的副本来证实这两个签名之一时,主机才接受该请求。
主机不可知集成和互操作系统利用面向所选服务的体系结构原理和方法,所述方法和原理有助于开放系统接口主机和客户端所实现的开放平台接口的版本间的高等级的跨版本兼容性。主机不可知集成和互操作系统的各实施例遵循“忽略你不期望的”以及“对于你期望但是没有得到的数据使用默认值”的面向服务的体系结构原理。具体而言,元数据对象注释是以对响应主体而言可接受的方式来构造的,以包括接收者没有识别的对象。换言之,如果响应主体包括比接收者原本期望的更多的数据,则不期望的数据被忽略。替代地,如果响应主体略去接收者期望的数据,则为丢失的数据使用默认值。例如,布尔值默认为“假”,而所有串值默认为“空”,而整数值默认为0。具有清楚的默认值的任何其他数据类型可被约定引入。而且,开放平台接口的某些实施例采用“默认值必须带来可接受的行为”的语义。
外部应用服务器和主机之间的通信被认为是受信的,因为主机总是代表主机不可知接口和互操作性系统中的用户来发起事务。而且,请求都是主机会允许用户进行的动作。当动作不是用户应当能够进行的时(即,获得受保护文件),主机不可知接口和互操作性系统应当请求证据密钥。主机不可知接口和互操作性系统采用可选的证据系统,该证据系统允许主机验证请求者的身份并将附加的信任层添加到该事务中。证据系统使用携带调用者的身份的证据的请求(即,调用)。为了实现证据系统,主机必须获得该外部应用服务器专用的密码密钥(即,证据密钥)。该证据密钥为主机提供一种机制,通过这种机制来验证请求实际上是由该受信外部应用服务器做出的。在各实施例中,主机通过HTTPS连接获得密码密钥来确保主机正与主机期望与其通信的外部应用服务器通信。在依赖于公钥密码系统(诸如RSA)的一个实施例中,证据密钥是与外部应用服务器所保持的私钥相对应的公钥。外部应用使用与该公钥相对应的私钥对后续通信的部分签名以创建密码签名。在各实施例中,被签名的部分包括时间戳、URL、访问令牌、以及这些信息片段中的一个或多个的散列。更具体而言,时间戳被添加到头部并被包括在签名中,并且指向发起该请求的外部应用服务器的URL被包括在该签名中。在各实施例中,来自外部应用服务器的请求包括携带该密码签名的证据头部。主机使用该证据密钥来证实密码签名是使用对应的私钥来生成的。在某些实施例中,主机使用时间戳来验证密码签名在可接受时间限制内。
尽管许多应用将受益于证据系统所提供的附加的信任层,该证据系统是该主机不可知接口和互操作性系统的可选组件。该主机具有实施或要求身份的证据的选项。如果在主机要求证据头部时该服务应用不提供该证据头部,则该主机简单地忽略该请求,或者替代地返回指示该请求未被授权的错误消息。在某些实施例中,主机公开对该外部应用服务器要求证据头部,以便该服务应用将知道在所有请求中包括该证据头部。当不要求身份的证据时,主机可选择忽略请求中的证据头部。
在主机不可知接口和互操作性系统中,主机发起与外部应用服务器的关系并在该时刻从该外部应用服务器获得证据密钥。在各实施例中,将证据密钥作为在发现进程期间返回的发现元数据的一部分或作为对主机的初始回调的一部分提供给主机。该主机还期望将来的通信来自外部应用服务器。因为外部应用服务器在主机发起信任关系时提供证据密钥,所以主机可依赖于以下事实:使用证据密钥证实的密码签名是由原始提供该证据密钥的相同外部应用服务器生成的,而没有被第三方欺诈。
开放平台接口使用访问令牌来唯一标识一事务。而且,访问令牌为与该事务相关的通信提供认证机制,并且消除了外部应用服务器(即,开放平台接口客户端)参与主机通常使用的特定认证方案的需要。访问令牌是对用户/文档对来说唯一的令牌,主机端点120使用该用户/对象对来认证用户106并授权对该文档的访问。在各个实施例中,访问令牌包括用户标识符、时间戳和文档标识符中的一个或多个的散列,并用该主机已知的秘密(secret)来加密该访问令牌。
主机发起的事务的使用允许主机不可知接口和互操作性系统依赖主机侧认证并避免外部应用服务器本机地认证用户的需要。换言之,用户总是在主机上做某个动作(例如,用户界面动作或姿势),所述动作指示用户想要以特定方式开始与文档交互(例如,编辑、移动查看等)。主机总是有机会同时生成可选地绑定于用户和文档、具有相对短的寿命、并且随后能被主机确认的访问令牌。开放平台接口不要求主机使用特定方案来生成访问令牌,而主机可使用各种已知访问令牌生成方案或新的方案中的任何一个来用于此目的。除了访问令牌存在并且与特定事务相关联(即,它标识特定用户和文件)以外,服务应用不需要知道关于该访问令牌的任何事情。访问令牌的实际内容对服务应用来说是完全不透明的。服务应用仅包括与涉及相关联事务的主机通信中的访问令牌。因为主机不需要使访问令牌对外部应用服务器可理解(intelligible),所以主机能够使用任何信息来保证访问令牌被绑定到特定用户和文件,并且保证访问令牌不是无限期地有效的。
作为推荐安全实践的一部分,开放平台接口的约定强烈鼓励主机将访问令牌链接到具体用户和具体资源(例如,具体文件或文档)。当如此链接时,即便访问令牌被危及,攻击者将只获得对具体文件的访问,并且仅具有授予该具体用户的权限,而不是为该用户在给定系统中可能做的所有事的一般性许可。由于嵌入到开放平台接口所使用的URL中的信息的类型和量(例如,访问令牌或文档内容),推荐在该开放平台接口的所有入站和出站调用中使用安全通道(例如,HTTPS),尽管这不是必需的。
元数据URL参考文件,而访问令牌参考该文件的具体用户的具体访问时间。例如,如果两个用户正在同一时间编辑同一文档,则这两个用户均被给予相同的元数据URL,但是每个用户将具有不同的访问令牌,从而允许主机和/或服务应用分开地跟踪每个用户的动作(即,事务)。然而,不要求服务应用标识或区分这两个用户。服务应用的所有所需要的仅是在请求中包括访问令牌,从而主机可标识用户并执行该请求的任何必要用户等级认证。
如果该事务需要服务应用了解附加资源,则开放平台接口的约定指定主机应当为每个附加的资源提供新的访问令牌。换言之,每当外部应用在该开放平台接口下做出调用来了解不同资源时,主机提供该资源的元数据URL和访问令牌,从而该服务应用可代表该用户与该资源交互。如果该服务应用需要知道关于该用户的任何事情(例如,用户的名称或者该用户对一文件具有什么许可),该主机在服务应用对该主机做出首次调用时提供该信息。该服务应用接受访问令牌作为执行该事务的标识和授权,而不需要独立地且本机地在该主机所使用的任何认证方案下认证该用户。换言之,访问令牌允许服务应用完全信任主机来处理各事项的用户侧。
因为该服务应用完全依赖访问令牌并且不以任何方式、形状或形式认证用户,所以该开放平台接口允许应用(例如,主机应用)提供编程功能以发起对服务应用的请求。该主机使用该开放接口协议直接向服务应用包装做出针对适当服务应用入口URL的HTTP GET请求,而从该外部应用服务器到该主机的响应的主体仅包含指示该任务的结果的数据。通过使用访问令牌使此功能成为可能,访问令牌消除了用户代理直接导航到外部应用服务器来获得认证信息的需要,并且这在需要用户的本机认证的现有技术中是不可用的。
例如,主机可请求文档转换而不需要用户的交互。在这种情况下,主机直接向外部应用发送请求,该请求发起转换动作并指定目标文件和访问令牌。作为响应,服务应用调用主机端点,获得文件,执行转换,并且将转换后的文档直接返回到主机。在另一示例中,外部应用提供切取器(teaser)服务,该服务采用一文档(例如,字处理文档或演示文稿文档)并提取所选的信息位(例如,突出显示的部分)。所提取的信息随后可在新闻订阅源或其他出口中示出。因为该开放平台接口允许主机直接获得该数据而不需要使用户必需在该时刻参与该过程。基本上,主机仅醒来并请求外部应用服务器提供文档的切取器。当主机做出该请求时不要求该用户在场。而且,该服务应用直接开始该调用(编程地),而不是将代码加载到网页中。只要该调用提供所需的信息(例如,文件标识符和访问令牌),该外部应用就执行该请求并且将所请求的数据直接返回到该主机,而不是将该数据发送到浏览器实例。
除了两个核心方法(即,获得元数据和获得二进制数据)之外,该开放平台接口的各实施例定义了更多的方法。这些更多的方法由该开放平台接口和相关联的约定来定义。外部应用服务器将这些更多的方法的可用性以功能集列表的形式来公开。每个功能集由串(例如,Cobalt、Locking(锁定)、Update(更新))来声明,并承诺实现开放平台接口所支持的方法集合。进而,主机公开它所支持的功能集。相应地,外部应用服务器基于主机的能力来知道是否提供某个功能。更具体而言,如果主机不公开对具体功能的支持,则服务应用抑制需要不受支持的功能的任意特征。例如,当主机不能保存文件的已更新副本时,服务应用不应当允许用户编辑文档。
功能集的声明、实现和消费担当开放平台接口的主要可扩展性机制。该开放平台接口不允许通用的(即,完全开放的)元数据交换机制(诸如简单对象访问协议(SOAP)所使用的)来描述可用功能。换言之,主机可用于实现的功能集限于该开放平台接口和相关联的约定所提供的那些。通过将可用功能集绑定到约定,免除了该开放协议接口尝试完全描述该功能的负担。相反,每个约定被简单地声明,并且仅在两侧均相信它们知道该约定意味着什么时使用。约定阻挡动作的唯一的时刻是在该服务应用声明要求约定而主机不理解该要求时。
功能集是由描述该接口所支持的方法的一个或多个动词构成的。每个动词为该接口的特定方法定义主机和外部应用服务器之间的请求和响应的格式和内容。一般而言,每个动词的定义描述请求的格式(即,URL结构)、与该请求相关联的所支持的头部、所需要的或可选地包括在请求主体中的任何信息、所支持的错误码、提供关于错误码的附加信息的任何所支持的头部、与响应相关联的所支持的头部、以及响应主体中包括的任何信息。以下讨论描述了该接口的一个示例性实施例。该示例不是为了以任何方式限制由该接口所提供的特征和功能。
图2A到2E示出使用开放接口协议来用服务应用118提供的功能访问主机102处理的文档的过程的一个实施例。存在使用该过程的事务的一个具体示例,其中用户106想要查看作为电子邮件的附件接收的字处理文档。本示例性事务不应当被解释为以任何方式限制主机不可知集成和交互系统100。在本示例中,主机102已经发现了外部应用服务器104并知晓在哪里寻找外部应用服务器104、知晓如何生成服务应用入口URL来调用服务应用、以及处理外部应用服务器104所提供的公钥。
用户106经由客户端计算设备110上的用户代理访问主机102并从主机102请求(步骤202)内容。主机102识别(步骤204)所请求的内容包括对所存储的文档的引用。在该示例性实施例中,该内容是包含所附字处理文档的电子邮件消息。主机102咨询(步骤206)发现元数据来确定是否支持该文档类型。对于外部应用服务器104所支持的类型的文档,主机102确定(步骤208)外部应用服务器104所支持的与该文档类型相关联的动作。主机102选择性地生成(步骤210)外部应用服务器104所支持的每个动作的动作链接并将该动作链接与该文档相关联。主机102随后提供(步骤212)该文档和相关联的动作链接。用户代理显示(步骤214)由该主机提供的内容,包括该动作链接。传送(步骤216)主机提供的内容中的动作链接指示用户106期望对主机提供的内容中所引用的相关联的文档执行所选择的动作。在此场景中,用户106点击电子邮件消息中该附件的查看链接以查看该文档内容。
如同前面提到的,主机102管理该文档的用户访问权限以及外部应用服务器所提供的每个支持的服务应用的许可证。在向用户提供功能或允许用户调用动作以前,该主机可选地考虑用户等级许可,外部应用服务器/服务应用许可、管理性限制、以及在文档访问过程的各点处的基于上下文的约束。在各实施例中,该选择性考虑是否应当由于以下内容而限制访问:对文档的期望访问的不充分的用户许可/访问权限、缺少使用相关联的服务应用/外部应用服务器的有效许可证、主机配置中的防止主机检索或保存所选择的文档类型的管理性限制、和/或在正被递送的该内容的上下文中该动作是不适当的(例如,在文档被附加到进入的电子邮件时主机可能限制对该文档的编辑,而在其他上下文中却允许用户编辑该文档)。在其他实施例中可以使用其他准则而不背离本发明的范围和精神。在所示实施例中,当用户106点击动作链接时,主机102验证(步骤218)用户106具有访问该文档的许可和/或具有使用支持服务应用/外部应用服务器104的必须的许可证。当主机102确定该动作被限制时,主机102不调用(步骤220)被限制的动作。如果该动作不被限制,则主机102联系外部应用服务器104来调用该动作。
一旦已调用一动作,主机打开(动作222)服务应用包装而用户代理显示(步骤224)该应用服务包装,该包装包含外部应用服务器104的服务应用用户接口(即,输出)。主机102生成用于调用外部应用服务器104和调用所选择的动作的服务应用入口URL。主机102咨询(步骤226)所选择动作和文档类型的发现元数据以获得服务应用入口URL的参数和格式。服务应用入口URL的基础(base)是附加有适当服务应用的附加路径信息和任何必要或可选的参数的外部应用服务器的地址。这些参数包括但不限于:指向主机端点内的地址的URL、作为所选择的动作的目标的资源的标识符或定位符、以及可选的基于主机所使用的认证方案的用户106的访问令牌。基于主机102所使用的认证方案,主机102已经知道用户106的身份,并且已经知道该文档的身份,因为主机102正在提供该文档。在各实施例中,将资源标识符与主机端点URL内的所选择的地址相组合以创建该文档的元数据URL。
在开放平台接口下,元数据URL被用来操纵该资源的资源元数据或属性(例如,锁定该文件或标识该文件的所有者)。通过约定,元数据URL具有所定义的结构,而开放平台接口从该元数据URL得出开放平台接口所使用的其他URL。在各实施例中,通过在元数据URL中进行替换或向元数据URL附加路径,获得另外的动作的URL。在一个实施例中,元数据URL路径具有如下形式:\\<host address>\wopi\<collection type>\<resource ID>(\\<主机地址>\wopi\<集合类型>\<资源ID>),其中<host address>(<主机地址>)是主机的域名,<collection type>(<集合类型>)是指资源的类型(例如,文件、文件夹),而<resource ID>(<资源ID>)标识集合内的该目标资源。
接下来,主机102生成(步骤228)访问令牌,该访问令牌将用户106和该文档相关联。主机将这些参数与外部应用服务器104的基础URL相关联(步骤230)以构造服务应用入口URL。在某些实施例中,服务应用包装负责生成这些参数以及构造服务应用入口URL。主机102随后指导用户代理108来导航(步骤232)到在服务应用入口URL处运行的服务应用118。外部应用服务器104解析(步骤234)服务应用入口URL并提取元数据URL和访问令牌。外部应用服务器104还将服务应用用户接口(其包含服务应用用户接口和文档内容)寄送(步骤236)到服务应用包装。服务应用用户接口是经由客户端计算设备110上的用户代理可查看的(步骤238)。
一旦针对一文档的动作已经被主机102调用,则外部应用服务器104通过发送到主机端点120的请求来发起与主机104的所有进一步的通信(例如,访问存储在主机上的文档或执行其他文件系统动作)。在所示实施例中,从主机102获得文档在多个步骤中进行。外部应用服务器104向主机端点120的元数据URL发送(步骤240)文档元数据请求(该请求包括访问令牌和文件标识符)以了解该文档(即,获得文档元数据/属性)。在某些实施例中,文档元数据请求包括证据头部,该证据头部包括密码签名,而主机在将关于文档的信息返回给服务应用118之前检查(步骤242)该密码签名。在返回文档元数据之前,主机102可选地确认访问令牌(步骤244)。如果主机102不能使用证据密钥来验证该密码签名或者确认该访问令牌,则主机拒绝(步骤246)该文档元数据请求。否则,主机将与该请求相关的文档元数据在响应的主体中返回(步骤248)给外部应用服务器,该元数据由外部应用服务器104来消费(步骤250)。
接下来,外部应用服务器向文件访问URL发送(步骤252)第二请求来获得文档的二进制内容,该第二请求也包括访问令牌和文件标识符。在各实施例中,文件访问URL是根据通过开放平台接口的约定所建立的公式或专利而生成的修改版的元数据URL,并且不需要在文档元数据中提供。在一个实施例中,文件访问URL是通过向元数据URL附加“\conent”(“\内容”)来生成的(即,通过添加子路径/文件夹/目录)。正如文档元数据请求的情况,文档内容请求的某些实施例包括证据头部,该证据头部包括密码签名,而主机在将该文档内容返回给服务应用118之前可选地检查(步骤254)该密码签名。在返回该文档的二进制内容之前,主机102也可选地确认访问令牌(步骤256)。如果主机102不能使用证据密钥来验证该密码签名或者确认该访问令牌,则主机忽略或拒绝(步骤258)该文档内容请求。否则,该主机在该文档内容响应的主体中返回(步骤260)文档内容,该文档内容由外部应用服务器104消费(步骤262)。替代地,在文档元数据中提供的文件访问URL是直接访问URL,该直接访问URL是指向该文档内容的直接链接。当内容存储系统(即,主机)在一组服务器上维护文档元数据而在一组不同服务器上维护实际文档内容时,使用直接访问URL是有益的。使用直接访问URL消除了主机担当中间人来获得存储在分开的服务器上的文档内容的需要。在若干实施例中,对直接访问URL的请求不使用证据系统,并且不用普通开放平台接口头部来装饰。
当接收到文档内容时,外部应用服务器104更新(步骤264)该服务应用用户接口来包括该文档内容,这允许用户106访问该文档。主机102所提供的服务应用包装122显示(步骤266)更新后的服务应用用户接口。用户106经由用户代理来与该服务应用用户接口交互(268)以操纵该文档。外部应用服务器104处理(步骤270)用户106的交互并根据需要操纵该文档内容。更新(步骤264)、显示(步骤266)、交互(步骤268)、以及处理(步骤270)服务应用用户接口的步骤根据需要重复,直到服务应用确定(步骤272)完成用户106与文档的交互为止。
在与该文档的所有交互结束后,外部应用服务器104请求(步骤274)主机102提交对该文档做出的任何改变并且关闭(步骤276)该服务应用会话。主机102通过在必要时保存该文档(步骤278)以及关闭该文档(步骤280)来做出响应。
如同先前指示的,图2A到2E表示该过程的一个实施例并且不应当被解释为将该过程限制于任何特定的步骤集合或步骤序列。该过程的其他实施例可包括另外的步骤、省略步骤、组合步骤、以及改变各步骤的次序。下面描述了该过程的替代实施例的示例。在某些实施例中,在生成用于访问外部应用服务器所提供的功能的动作链接或动态用户接口控件(例如,上下文菜单)之前或之时,主机还检查约束(restriction)。如果针对该文档类型约束了该动作,则主机不生成/显示动作链接或动态用户接口控件中的命令。这种初步验证防止了提供给用户106执行仅在选择动作链接之后被拒绝的动作的机会。在另一实施例中,主机102预先确定在主机咨询发现元数据时该服务应用入口URL的格式,以确定外部应用服务器104所支持的对文档的动作,从而有效地将步骤206和步骤226相组合。
如此处所述,提供一种开放平台接口系统,该系统允许使用常见协议的主机和外部应用服务器之间的主机不可知集成。在该开放平台接口系统下,认证、安全、和文件系统操作仅是主机的责任。该外部应用服务器不包括与网络访问相关联的复杂度和开销、用户认证、文件存储、网络和文件安全、以及通常由网络中的其他服务器来处理且通常专用于特定企业的其他管理任务。忽略这些特征并使外部应用服务器聚焦于通过开放接口协议来处理文档动作允许外部应用服务器用于各种各样的企业网络场景。应当理解,如此处所描述的执行并且承担通常由企业网络上的其他服务器来处理的额外角色和责任的外部应用服务器落入本发明的范围和精神。
本文描述的实施例和功能可经由许多计算系统来操作,诸如上面参考图1所描述的主机、和外部应用服务器104、和客户端计算设备110,包括有线和无线计算系统、移动计算系统(如移动电话、图形输入板或平板型计算机、膝上型计算机等)。此外,本文所述的实施例和功能可在分布式系统上操作(如基于云的计算系统),其中应用功能、存储器、数据存储和检索、以及各种处理功能可在诸如因特网或内联网之类的分布式计算网络上彼此远程地操作。各种类型的用户界面和信息可经板载计算设备显示器或经与一个或多个计算设备相关联的远程显示单元被显示。例如,各种类型的用户界面和信息可在墙壁表面上被显示和交互,各种类型的用户界面和信息被投射在墙壁表面上。与可用于实施本发明的各实施例的许多计算系统的交互包括:键击输入、触摸屏输入、语音或其他音频输入、姿势输入(其中相关联的计算设备配备有用于捕捉和解释用于控制计算设备的功能的用户姿势的检测(如相机)功能)等。图3到5以及相关描述提供了其中可实施本发明的各实施例的各种操作环境的讨论。然而,关于图3到5所示出和讨论的设备和系统是用于示例的目的,而非对可被用于实施本文所述的本发明的各实施例的大量计算设备配置的限制。
图3是示出可用来实施本发明的各实施例的计算设备300的示例物理组件的框图。下面描述的计算设备组件可适合于上面描述的计算设备,例如主机102、外部应用服务器104、和客户端计算设备110。在基本配置中,计算设备300可包括至少一个处理单元302和系统存储器304。取决于计算设备的配置和类型,系统存储器304可包括,但不限于,易失性存储(例如,随机存取存储器(RAM))、非易失性存储(例如,只读存储器(ROM))、闪存、或任何组合。系统存储器304可包括操作系统305和一个或多个编程模块306,该编程模块306适合于运行诸如客户端应用(例如,用户代理/web浏览器108)或服务器应用(例如,主机应用112或服务应用118)的应用320。操作系统305例如可适合于控制计算设备300的操作。此外,本发明的实施例可结合图形库、其他操作系统、或任何其他应用程序来实践,并且不限于任何特定应用或系统。该基本配置在图3中由虚线308内的那些组件示出。计算设备300可具有附加特征或功能。例如,计算设备300还可包括附加数据存储设备(可移动和/或不可移动),例如磁盘、光盘或磁带。这些附加存储在图3中由可移动存储设备309和不可移动存储设备310示出。
如上所述,可在系统存储器304中存储多个程序模块和数据文件。当在处理单元302上执行时,编程模块306(诸如用户代理108、主机应用112、或服务应用118)可执行过程,所述过程包括例如图2A到2E中示出的方法的各阶段中的一个或多个。上述过程是一示例,且处理单元302可执行其他过程。根据本发明的实施例可使用的其他编程模块可包括电子邮件和联系人应用、文字处理应用、电子表格应用、数据库应用、幻灯片演示应用、绘图或计算机辅助应用等。
一般而言,根据本发明的实施例,程序模块可包括可执行特定任务或可实现特定抽象数据类型的例程、程序、组件、数据结构和其他类型的结构。此外,本发明的实施例可用其他计算机系统配置来实践,包括手持式设备、多处理器系统、基于微处理器的系统或可编程消费电子产品、小型机、大型计算机等。本发明的实施例还可在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实践。在分布式计算环境中,程序模块可位于本地和远程存储器存储设备两者中。
此外,本发明的实施例可在包括分立电子元件的电路、包含逻辑门的封装或集成电子芯片、利用微处理器的电路、或在包含电子元件或微处理器的单个芯片上实践。例如,可以通过片上系统(SOC)来实施本发明的各实施例,其中,可以将图3中示出的每个或许多组件集成到单个集成电路上。这样的SOC设备可包括一个或多个处理单元、图形单元、通信单元、系统虚拟化单元以及各种应用功能,所有这些都被集成到(或“烧录到”)芯片基板上作为单个集成电路。当通过SOC操作时,在此所述的关于用户代理108、主机应用112、或服务应用118的功能可以通过在单个集成电路(芯片)上与计算设备300的其它组件集成在一起的专用逻辑来操作。本发明的实施例还可使用能够执行诸如例如,AND(与)、OR(或)和NOT(非)的逻辑运算的其他技术来实践,包括但不限于,机械、光学、流体和量子技术。另外,本发明的实施例可在通用计算机或任何其他电路或系统中实践。
例如,本发明的实施例可被实现为计算机过程(方法)、计算系统、或诸如计算机程序产品或计算机可读介质之类的制品。计算机程序产品可以是计算机系统可读并对用于执行计算机过程的指令的计算机程序编码的计算机存储介质。
本文所使用的术语计算机可读介质可包括计算机存储介质。计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块、或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器304、可移动存储设备309和不可移动存储设备310都是计算机存储介质(即,存储器存储)的示例。计算机存储介质可以包括,但不限于,RAM、ROM、电可擦除只读存储器(EEPROM)、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或可用于存储信息且可以由计算设备300访问的任何其它介质。任何这样的计算机存储介质都可以是计算设备300的一部分。计算设备300还可具有一个或多个输入设备312,诸如键盘、鼠标、笔、声音输入设备、触摸输入设备等。还可包括输出设备314,诸如显示器、扬声器、打印机等。上述设备是示例,并且可使用其他设备。
本文所使用的术语计算机可读介质还可包括通信介质。通信媒介可由诸如载波或其他传输机制的已调制数据信号中的计算机可读指令、数据结构、程序模块、或其他数据来体现,并且包括任何信息传递介质。术语“已调制数据信号”可以描述以对该信号中的信息进行编码的方式设定或者改变其一个或多个特征的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接等有线介质,以及诸如声学、射频(RF)、红外线和其他无线介质等无线介质。计算设备300可包括允许与其他计算设备318进行通信的一个或多个通信连接316。合适的通信连接316的示例包括但不限于RF发射机、接收机和/或收发机电路;通用串行总线(USB)、并行或串行端口、以及适用于与适用的计算机可读介质一起使用的其他连接。
图4A和4B示出可用来实施本发明的各实施例的移动计算环境400,例如移动电话、智能电话、平板个人计算机、膝上型计算机等。参考图4A,示出了用于实现各实施例的示例性移动计算设备400。在一基本配置中,移动计算设备400是具有输入元件和输出元件两者的手持式计算机。移动计算设备400通常包括显示器405以及允许用户将信息输入到移动计算设备400中的一个或多个输入按钮410。移动计算设备400的显示器405也可充当输入设备(如触摸屏显示器)。如果包括,则可任选的侧输入元件415允许进一步的用户输入。侧输入元件415可以是旋转开关、按钮、或任何其他类型的手动输入元件。在替代实施例中,移动计算设备400可结合更多或更少的输入元件。例如,在某些实施例中,显示器405可以不是触摸屏。在又一替代实施例中,移动计算设备400是诸如蜂窝电话之类的便携式电话系统。移动计算设备400还可包括可选的小键盘435。可选的小键盘435可以是物理小键盘或者在触摸屏显示器上生成的“软”小键盘。在各种实施例中,输出元件包括用于示出图形用户界面(GUI)的显示器405、可视指示器420(如发光二极管)、和/或音频换能器425(如扬声器)。在某些实施例中,移动计算设备400结合振动换能器来向用户提供触觉反馈。在又一实施例中,移动计算设备400结合诸如音频输入(如麦克风插孔)、音频输出(如耳机插孔)、以及视频输出(如HDMI端口)之类的输入和/或输出端口,用于将信号发送到外部设备或从外部设备接收信号。
尽管此处组合移动计算设备400来描述,但在替代实施例中,本发明还可组合任何数量的计算机系统来被使用,如在台式环境、膝上型或笔记本计算机系统、多处理器系统、基于微处理器或可编程消费电子产品、网络PC、小型计算机、大型计算机等。本发明的实施例也可在分布式计算环境中实践,其中任务由分布式计算环境中通过通信网络链接的远程处理设备来执行;程序可位于本机和远程存储器存储设备中。总而言之,具有多个环境传感器、向用户提供通知的多个输出元件和多个通知事件类型的任何计算机系统可结合本发明的实施例。
图4B是示出移动计算设备的一个实施例的架构的框图。即,移动计算设备400可结合系统(即架构)402以实现某些实施例。在一个实施例中,系统402被实现为能够运行一个或多个应用(如浏览器、电子邮件、日历、联系人管理器、消息收发客户端、游戏、以及媒体客户端/播放器)的“智能电话”。在某些实施例中,系统402被集成为计算设备,诸如集成的个人数字助理(PDA)和无线电话。
一个或多个应用程序466可被加载到存储器462中并在操作系统464上或与操作系统464相关联地运行。应用程序的示例包括电话拨号程序、电子邮件程序、个人信息管理(PIM)程序、文字处理程序、电子表格程序、因特网浏览器程序、消息通信程序等等。系统402还包括存储器462内的非易失性存储区468。非易失性存储区468可被用于存储在系统402断电时不会丢失的持久信息。应用程序466可使用信息并将信息存储在非易失性存储区468中,如电子邮件应用使用的电子邮件或其他消息等。同步应用(未示出)也驻留于系统402上且被编程为与驻留在主机计算机上的对应的同步应用交互,以保持非易失性存储区468中存储的信息与主机计算机处存储的相应信息同步。如应理解的,其他应用可被加载到存储器462中并在移动计算设备400上运行,包括此处所述的用户代理108、主机应用112、或服务应用118。
系统402具有可被实现为一个或多个电池的电源470。电源470还可包括外部功率源,如补充电池或对电池重新充电的AC适配器或加电对接托架。
系统402还可包括执行发射和接收无线电频率通信的功能的无线电472。无线电472通过通信运营商或服务供应商方便了系统402与“外部世界”之间的无线连接。来往无线电472的传输是在操作系统464的控制下进行的。换言之,无线电472接收的通信可通过操作系统464传播到应用程序466,反之亦然。
无线电472允许系统402例如通过网络与其他计算设备通信。无线电472是通信介质的一个示例。通信介质通常由诸如载波或其他传输机制之类的已调制数据信号中的计算机可读指令、数据结构、程序模块、或其他数据来体现,并且包括任何信息传送介质。术语“已调制数据信号”是指具有以在信号中编码信息的方式被设定或改变其一个或多个特征的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。如此处所使用的术语“计算机可读介质”包括存储介质和通信介质两者。
系统402的该实施例使用可用于提供可视通知的可视指示器420和/或通过音频换能器425来产生音频通知的音频接口474来提供通知。在所示实施例中,可视指示器420是发光二极管(LED),而音频换能器425是扬声器。这些设备可直接耦合到电源470,使得当被激活时,即使为了节省电池功率而可能关闭处理器460和其它组件,它们也保留一段由通知机制指示的保持通电时间。LED可被编程为无限地保持通电,直到用户采取动作指示该设备的通电状态。音频接口474用于向用户提供听觉信号并从用户接受听觉信号。例如,除了被耦合到音频换能器425之外,音频接口474还可被耦合到话筒来接收可听输入,例如便于电话通话。根据各本发明的各实施例,话筒也可充当音频传感器来便于对通知的控制,如下文将描述的。系统402可进一步包括允许板载相机430的操作来记录静止图像、视频流等的视频接口476。
实现系统400的移动计算设备402可具有附加特征或功能。例如,移动计算设备400还可包括附加数据存储设备(可移动和/或不可移动),例如磁盘、光盘或磁带。这种附加存储设备在图4B中用非易失性存储区468示出。计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块、或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。
移动计算设备400生成或捕捉的且经系统402存储的数据/信息可如上所述本地存储在移动计算设备400上,或数据可被存储在可由设备通过无线电472或通过移动计算设备400和与移动计算设备400相关联的一分开的计算设备之间的有线连接访问的任何数量的存储介质上,该计算设备如例如因特网之类的分布式计算网络中的服务器计算机。如应理解的,此类数据/信息可经移动计算设备400、经无线电472或经分布式计算网络来被访问。类似地,这些数据/信息可根据已知的数据/信息传送和存储手段来容易地在计算设备之间传送以供存储和使用,这些手段包括电子邮件和协作数据/信息共享系统。
图5示出用于向一个或多个客户端设备提供如上所述的用户代理108、主机应用112、和/或服务应用118的系统的体系结构的一个实施例。与主机应用112和/或服务应用118相关联地开发、交互或编辑的内容可被存储在不同通信信道或其他存储类型中。例如,各种文档可使用目录服务522、web门户524、邮箱服务526、即时消息存储528或社交网站530来存储。如在此所述,主机应用112和/或服务应用118可使用用于允许数据利用的这些类型的系统等中的任一个。服务器520可为客户端提供主机应用112和/或服务应用118。作为一个示例,服务器520可以是通过web来提供主机应用112和/或服务应用118的web服务器。服务器520可通过网络515向客户端提供web上的主机应用112和/或服务应用118。作为示例,客户端计算设备110可被实现为计算设备300并被具体化在个人计算机110a、平板计算设备110b和/或移动计算设备110c(如智能电话)中。客户端计算设备110的这些实施例中的任一个可从存储516获得内容。
以上参考例如根据本发明的实施例的方法、系统和计算机程序产品的框图和/或操作示图描述了本发明的实施例。框中所注明的各功能/动作可按不同于任何流程图所示的次序出现。例如,取决于所涉及的功能/动作,连续示出的两个框实际上可基本同时执行,或者这些框有时可按相反的次序执行。
尽管已描述了本发明的特定实施例,但也可能存在其他实施例。此外,虽然本发明的实施例被描述为与存储在存储器和其他存储介质中的数据相关联,但是数据还可被存储在其他类型的计算机可读介质上或从其读取,诸如辅助存储设备(像硬盘、软盘、或CD-ROM)、来自因特网的载波、或其他形式的RAM或ROM。此外,所公开的方法的各步骤可以任何方式修改,包括通过对各步骤重新排序和/或插入或删除阶段,而不背离本发明。
在各种实施例中,用于在构成本发明的计算设备之间进行通信的网络的类型包括但不限于互联网、内联网、广域网(WAN)、局域网(LAN)、以及虚拟专用网络(VPN)。在本申请中,网络包括企业网络和客户端计算设备用来访问企业网络的网络(即客户端网络)。在一个实施例中,客户端网络是企业网络的一部分。在另一实施例中,客户端网络是通过外部可用的接入点(如网关、远程访问协议、或公共或专用互联网地址)来访问企业网络的一分开的网络。
本申请中提供的一个或多个实施例的描述和说明不旨在以任何方式限制或约束如权利要求所要求保护的发明范围。本申请中提供的实施例、示例和细节被认为是足以传达所有权,且使得他人能够制作并使用所要求保护的发明的最佳模式。所要求保护的发明不应被理解为限制于本申请中所提供的任何实施例、示例或细节。不管是以组合的方式还是分开的方式示出和描述,各种特征(结构上的和方法逻辑上的)旨在被选择性地包括或忽略,以产生具有特定的特征集的实施例。在被提供本申请的描述和说明的情况下,本领域的技术人员能够想象到落在所要求保护的发明的更宽泛方面以及本申请中所具体化的一般发明概念的精神内的替代实施例并不背离该更宽泛的范围。