OCF技术原理及物联网程序开发指南
上QQ阅读APP看书,第一时间看更新

2.3 OCF标识与寻址

为了有效促进OCF架构元素间的互动,需要一种方法去标识元素、命名元素以及对这些元素寻址。

对于OCF系统中的标识符,应该唯一地表示环境或域中的元素。环境、域根据使用情况或者应用程序决定。元素的标识符在其生命周期应该是不可变的,并且在该环境或域中是独一无二的。

与其他系统一样,OCF地址是用来定义一个位置、访问元素的方法,以便与其进行交互,地址在环境中是可变的。

名字是用来分辨架构中的元素,名字在该元素生命周期中可以改变。可以通过已知其他的一个或多个条件决定另一个名字或地址(如用地址决定名字或名字决定地址)。

在多个环境中,可以分别定义每个方面(如一个环境可以是一层)。所以,地址可以是寻址资源的URL以及连续层寻址的IP地址。在某些情况下,这两种资源都需要。例如,对一个特定的资源呈现做检索操作,客户端需要知道目标资源的地址以及暴露该资源的服务器地址。

在使用的环境或者域中,名字或地址可以被用作标识符,反之亦然。例如,URL可以被用作资源的标识符并且可被制定为URI。

本节的其余部分从资源模型和它所支持交互的角度讨论标识符、地址以及命名。交互是基于RESTful的,例如,对资源的操作、传输协议的映射,可以使用CoAP协议和HTTP协议。

标识符应该在环境或使用域内是唯一的。目前有许多方案可以产生具有所需属性的标识符。标识符是特定背景的,即在该环境或域中是独一无二的。标识符背景还可以是独立的,即这些标识符在所有环境和域中都是独一无二的。特定背景标识符可以被定义为像单调枚举的简单方案或者定义为重载的地址或名称。例如,一个IP地址可以是一个在智能网关后的私人域汇总的标识符。另外,背景独立标识符需要更强的方案去派生全局独立标识符,例如UUID(Universally Unique Identifier,全局唯一标识符)中的任何一个。背景独立标识符可通过域的分层来生成,即层次的根由一个UUID来定义,子域通过连接这个域内特定背景标识符和其父域的背景独立标识符来产生背景独立标识符。

资源可以使用URI标识,如果该URI是一个URL,则可以用同一个URI去寻址该资源。在一些情况下,资源需要和URI不一样的标识符,在这种情况下,资源属性的值是标识符。当URI是URL的格式时,该URI可用来寻址该资源。一个OCF的URI是基于在IETF RFC 3986中定义的,URI的一般格式为<scheme>://<Authority>/<Path>?<Query>。对于OCF,URI的格式为oic://<Authority>/<Path>?<Query>。

每个使用的部分说明如下:URI的方案是“oic”。“oic”方案表示了语义,在OCF规范定义中使用。如果一个URI的“//”前面的部分省略,那么就默认其使用OCF方案。

在请求者通过网络发送消息之前,每个传输绑定需要指明一个OCF的URI是如何转换为传输协议的URI。在接收端也是相似的,在切换到接收者的资源模型层之前,每个传输绑定需要指明OCF是如何从一个传输协议URI转换为OCF的URI。

如果权限是局部OCF设备,那么“oic”被用于权限。权限的一般形式为<host>:<port>,其中,<host>是名字或者终端网络地址,<port>是网络端口号。<host>提供的内容如下:对于IP网络,<host>是<authority>的主机名或IP地址;对于非IP网络,<host>是名字或者合适的标识符;如果<authority>是支持资源的OCF设备,那么关键词oic可能会用于<host>。

路径必须是唯一的字符串,是唯一在该OCF服务器环境中标识或指定的一个资源。在此版本中,一个路径不应该包括非ASCII字符或NUL字符。路径应该以“/”(斜线)开始。为了方便人们阅读,路径可能用“/”分隔。在OCF环境中,“/”分离段被视为一个字符串,直接引用资源(即扁平结构)而不是解析为一个层次架构。在该OCF服务器中,路径或路径中的子字符串会通过哈希算法或其他方案来进行压缩,当然要假设产生的引用在该主机环境内是唯一的。

一旦产生路径,该资源的客户端或者URI的接收方会使用该路径为不透明字符串,并且无法解析其结构、组织或者语义。

一个查询字符串应该包括“<name>=<value>”字段对的列表,每对由“;”分隔。查询字符串将被映射到相关协议的语法,用于消息传递,如CoAP。

URI的产生:URI可以是绝对的(完全限定),也可以是相对的。URI可以由创造该资源的OCF客户端直接定义,这样的URI可以是相对的或者是绝对的。一个相对的URI应该是相对于其归属的OCF设备。另外,URI可以由该资源的OCF服务器端,自动根据该资源预先定义的公约或者组织,依据一个接口、一些原则、不同的根或基础来生成。

URI的使用:引用一个URI的绝对路径被认为是一个不透明字符串,客户端无法通过其推断出任何准确的或隐藏URI的结构,即URI仅仅是一个地址。拥有资源的OCF设备将每个资源的URI看作是一个只用来寻址该资源的不透明字符串。例如,URI的“/a”和“/a/b”认为是明确的地址,而且资源b不是资源a的子资源。

命名空间:相对的URI前缀“/oic/”被保留为一个OCF规范中定义的、用于命令URI的空间,不能用于非OCF定义规范中的URI。

网络寻址:OCF规范中使用IP地址,即当设备使用IP配置的接口时,使用IP地址。当该装置只有其对等端的身份信息,需要相关的机制将标识符映射到相应地址。