面向资源的架构(ROA)概述

【注】本文译自: Overview of Resource-Oriented Architectures (ROA) | Developer.com

了解面向资源的架构 (ROA)、其价值以及最佳实践。

image

  面向服务的架构 (Service-Oriented Architecture,SOA) 和面向资源的架构 (Resource-Oriented Architecture,ROA) 是用于实现健壮、可扩展的分布式应用程序架构的架构设计模式。分布式架构由通过定义良好的接口在网络上使用的组件组成。在 ROA 中,这些组件被称为资源,而在 SOA 中,它们被称为服务。本文概述了面向资源的体系结构。

什么是面向资源的架构 (ROA)?

  面向资源的架构 (ROA) 是一种架构风格,它扩展了 REST 架构风格,并提供了更广泛、可扩展、灵活且与传输无关的架构。面向资源的架构 (ROA) 范式建立在资源的概念之上。资源是一个独立的、可识别的实体,其状态可以被分配一个统一的资源定位符 (URI)。服务代表所请求操作的执行,而资源代表可通过一致的标准化接口进行管理的分布式组件。
  面向资源架构的特征之一是与传输无关。因此,必须有特定的机制将面向资源的服务暴露给外部世界。当消费者请求统一资源定位器(Uniform Resource Locator,URL)并指定访问方法(例如,GET、PUT、POST 和 DELETE)时,该 URL 将转换为相对的内部 URI。访问方法被转化为动作。
  面向资源的架构仅围绕四个概念建模:

  • 资源
  • URI
  • 表述
  • 链接和连通性

  以下是面向资源架构的四个属性:

  • 可寻址性
  • 无状态性
  • 连通性
  • 统一的接口

面向资源的架构:资源

  资源是 ROA 的基石;资源是信息的逻辑表示。例如,学生是数据点的抽象集合,可以用多种方式表示,包括 XHTML、JSON 和 XML。 资源名称包括以下内容:

  • 资源的类型
  • 资源标识符
  • 父元素的资源名
  • API 服务的名称

  资源是 REST 或 RESTful 架构中最重要的信息抽象。术语“资源”是指任何可识别的信息。这些信息可以是文档、计算机、汽车、临时服务(例如“俄亥俄州今天的天气”)、其他资源的集合、个人、学生等。
  每个不可变资源表示都可以通过相对的统一资源指示符 (URI) 来标识,它可能包括到其他资源以及其他不可变资源的连接。请注意,一个资源也可以有多个 URI。
  每种资源应具有以下特征:

  • 是唯一的
  • 必须至少有一个表述
  • 具有属性,模式可以被访问并提供上下文

统一资源标识符(URI)

  统一资源标识符 (Uniform Resource Identifier,URI) 是包含资源名称和地址的字符序列,用于标识逻辑或物理资源。请注意,资源必须具有一个或多个 URI。 没有 URI,一条信息不被视为资源,因为它不能被引用或访问。 您可以使用 URI 来标识任何事物,例如现实世界的对象、网页、书籍等。
  下面是一个 URI 的例子:语法::示例:http://payroll/employee/1234 下表说明了如何指定资源的相对 URI:

  • 动作
    相对 URI
    目的
  • Read
    /student/3
    读取 ID 是 3 的学生记录
  • Delete
    /student/4
    删除 ID 是 4 的学生记录

面向资源架构ROA的特性

  以下是面向资源的架构的四个基本属性:

可寻址性

  可寻址性是面向资源架构的一个基本特征。如果应用程序将其数据集的感兴趣方面发布为服务端点,则可以认为该应用程序是可寻址的。这些服务可以反过来用于处理应用程序的数据。由于 ROA 中的资源使用 URI 公开,因此应用程序应使用 URI 公开其数据。

无状态

  无状态是面向资源架构的另一个特征,这意味着该架构中的每个 HTTP 请求都是独立发生的。换句话说,当客户端向服务器请求资源时,客户端必须提供服务器请求成功所需的所有信息。服务器从不存储来自先前请求的信息,也就是说,服务器上不存储状态信息。如果服务器需要来自较早请求的信息来处理请求,则客户端必须在另一个请求中再次发送该信息。

连通性

  在面向资源的架构中,表述是超媒体:包含数据和其他资源链接的文档。RESTful Web 服务遵循超媒体作为应用程序状态引擎 (Hypermedia As the Engine Of Application State, HATEOS) 原则。这是数据格式影响应用程序中转换状态的原则。到其他资源的链接嵌入在响应中,但对于相同的资源,它们可能会根据其当前状态而有所不同。
  网络最重要的特征之一是它的互连性。也就是说,互联网上的几乎所有信息都通过超链接链接在一起。超链接可用于将互联网上可访问的任何资源连接到另一个资源。基于 ROA 构建的应用程序应将其所有资源相互链接,反之亦然。当我们为资源选择合适的表述时,我们可以在应用程序中实现连通性。

统一接口

  您应该有一组定义良好的方法来操作应用程序中的资源。例如,HTTP 提供了以下您可能通常需要在任何应用程序中执行的常见操作:

HTTP GET – 获取一个资源

HTTP POST – 创建新资源

HTTP PUT – 修改一个存在的资源

HTTP DELETE – 删除一个存在的资源

HEAD 和 OPTIONS HTTP 方法

  下面是您应该了解的另外两个重要的 HTTP 方法:

HTTP HEAD – 用于检索资源的元数据表述

HTTP OPTIONS – 用于检查特定资源支持哪些 HTTP 方法

总结

  面向资源的体系结构是无状态的,并以资源为中心。URI 用于标识每个资源。您总是可以在计算机上同时拥有同一资源的多个副本。一个资源也可以有多个 URI。

推荐阅读更多精彩内容