Software Architecture Design

RESTful

入门请参阅阮一峰的《理解RESTful架构》

作为一名 Web 开发者,如果还没听说过“REST”这个 buzzword,显然已经落伍了。夸张点说,甚至“出了门都不好意思跟别人打招呼”。

尽管如此,对于 REST 这个泊来品的理解,大多数人仍然停留在“盲人摸象”的阶段。常常听到各种各样关于 REST 的说法,例如:

  • 有人说:“我们这套新的 API 决定不用 Web Service(SOAP+WSDL),而是直接使用 HTTP+JSON,也就是用 RESTful 的方式来开发。”不用 SOAP,甚至也不用 XML,就自动变成了 RESTful 了。
  • 还有人认为:REST 与传统的 Web Service 其实没有本质区别,只是对于 URI 的构造方式提出了更多要求,而这些要求 Web Service 完全都可以实现。潜台词是:既生瑜,何生亮。Web Service 已经足够好了,干嘛还要再折腾什么 REST。

这些对于 REST 的不同说法,果真如此吗?REST 究竟是什么?是一种新的技术、一种新的架构、还是一种新的规范?

REST(Representational State Transfer)是一种轻量级的 Web Service 架构风格,其实现和操作明显比 SOAP 和 XML-RPC 更为简洁,可以完全通过 HTTP 协议实现,还可以利用缓存 Cache 来提高响应速度,性能、效率和易用性上都优于 SOAP 协议。

REST 的六个架构约束

  1. 客户-服务器(Client-Server)
    通信只能由客户端单方面发起,表现为请求-响应的形式。

  2. 无状态(Stateless)
    通信的会话状态(Session State)应该全部由客户端负责维护。

  3. 缓存(Cache)
    响应内容可以在通信链的某处被缓存,以改善网络效率。

  4. 统一接口(Uniform Interface)
    通信链的组件之间通过统一的接口相互通信,以提高交互的可见性。

  5. 分层系统(Layered System)
    通过限制组件的行为(即,每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层。

  6. 按需代码(Code-On-Demand,可选)
    支持通过下载并执行一些代码(例如 Java Applet、Flash 或 JavaScript),对客户端的功能进行扩展。

理解 REST 的五个关键词

  1. 资源(Resource)
    资源是一种看待服务器的方式,即将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。资源以名词为核心组织,一个资源可以由一个或多个 URI 来标识。

  2. 资源的表述(Representation)
    资源的表述是一段对于资源在某个特定时刻的状态的描述,可以在客户端-服务器端之间转移(交换)。表述可以有多种格式,如 HTML/XML/JSON/纯文本/图片/视频/音频等。

  3. 状态转移(State Transfer)
    在客户端和服务器端之间转移代表资源状态的表述。通过转移和操作资源的表述,来间接实现操作资源的目的。

  4. 统一接口(Uniform Interface)
    必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作(如 HTTP 的 GET/POST/PUT/DELETE 等)。操作语义必须由 HTTP 消息体之前的部分完全表达。

  5. 超文本驱动(Hypertext Driven)
    又名“将超媒体作为应用状态的引擎”(HATEOAS)。将 Web 应用看作一个由很多状态组成的有限状态机。资源之间通过超链接相互关联,超链接既代表资源之间的关系,也代表可执行的状态迁移。

REST 架构的主要特征

  • 面向资源(Resource Oriented)
  • 可寻址(Addressability)
  • 连通性(Connectedness)
  • 无状态(Statelessness)
  • 统一接口(Uniform Interface)
  • 超文本驱动(Hypertext Driven)

架构风格对比:DO vs RPC vs REST

常见的分布式应用架构风格有三种:

风格全称核心抽象代表实例
DODistributed Objects对象CORBA, RMI, EJB, DCOM
RPCRemote Procedure Call过程SOAP, XML-RPC, Hessian
RESTRepresentational State Transfer资源HTTP, WebDAV

REST 与 DO 的主要差别:

  • REST 抽象工具是资源(平台中立),DO 是对象(常与语言绑定)。
  • REST 有统一接口,DO 没有。
  • REST 使用超文本,交互效率更高,耦合度更低。

REST 与 RPC 的主要差别:

  • REST 以名词(资源)为核心建模,RPC 以动词(过程)为核心。
  • REST 有统一接口和超文本驱动,耦合度最小。

REST 与 CRUD 及 HTTP 方法的对应

REST 遵循 CRUD 原则,通过四种基本操作处理资源:

操作HTTP 方法说明
Create (创建)POST创建新资源
Read (读取)GET获取资源
Update (更新)PUT更新资源
Delete (删除)DELETE删除资源

这种设计降低了复杂性,提高了系统的可伸缩性。


Version Control - 版本控制系统

(内容待补充)

Code Review - 代码审查工具

SourceAnalysis(StyleCop) 的终极目标是让所有人都能写出优雅和一致的代码,因此这些代码具有很高的可读性。

它不是代码格式化工具,而是代码规范检查工具,检查范围包括:

  • 代码格式
  • 命名规范
  • 注释规范

目的:帮助团队执行一系列常用的源代码格式规范,确保代码布局规整、易读、易维护且文档良好。

目前包含约 200 个 最佳实践规则,与 Visual Studio 2005/2008 的默认代码格式化规则一致。

Web Server

Nginx 是一款轻量级的:

  • Web 服务器
  • 反向代理服务器
  • 电子邮件代理服务器(IMAP/POP3)

开源,基于 BSD-like 协议发行。

构建全面统一的 IT 运维管理体系

发布于: 2014-04-21