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 的六个架构约束
-
客户-服务器(Client-Server)
通信只能由客户端单方面发起,表现为请求-响应的形式。 -
无状态(Stateless)
通信的会话状态(Session State)应该全部由客户端负责维护。 -
缓存(Cache)
响应内容可以在通信链的某处被缓存,以改善网络效率。 -
统一接口(Uniform Interface)
通信链的组件之间通过统一的接口相互通信,以提高交互的可见性。 -
分层系统(Layered System)
通过限制组件的行为(即,每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层。 -
按需代码(Code-On-Demand,可选)
支持通过下载并执行一些代码(例如 Java Applet、Flash 或 JavaScript),对客户端的功能进行扩展。
理解 REST 的五个关键词
-
资源(Resource)
资源是一种看待服务器的方式,即将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。资源以名词为核心组织,一个资源可以由一个或多个 URI 来标识。 -
资源的表述(Representation)
资源的表述是一段对于资源在某个特定时刻的状态的描述,可以在客户端-服务器端之间转移(交换)。表述可以有多种格式,如 HTML/XML/JSON/纯文本/图片/视频/音频等。 -
状态转移(State Transfer)
在客户端和服务器端之间转移代表资源状态的表述。通过转移和操作资源的表述,来间接实现操作资源的目的。 -
统一接口(Uniform Interface)
必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作(如 HTTP 的 GET/POST/PUT/DELETE 等)。操作语义必须由 HTTP 消息体之前的部分完全表达。 -
超文本驱动(Hypertext Driven)
又名“将超媒体作为应用状态的引擎”(HATEOAS)。将 Web 应用看作一个由很多状态组成的有限状态机。资源之间通过超链接相互关联,超链接既代表资源之间的关系,也代表可执行的状态迁移。
REST 架构的主要特征
- 面向资源(Resource Oriented)
- 可寻址(Addressability)
- 连通性(Connectedness)
- 无状态(Statelessness)
- 统一接口(Uniform Interface)
- 超文本驱动(Hypertext Driven)
架构风格对比:DO vs RPC vs REST
常见的分布式应用架构风格有三种:
REST 与 DO 的主要差别:
- REST 抽象工具是资源(平台中立),DO 是对象(常与语言绑定)。
- REST 有统一接口,DO 没有。
- REST 使用超文本,交互效率更高,耦合度更低。
REST 与 RPC 的主要差别:
- REST 以名词(资源)为核心建模,RPC 以动词(过程)为核心。
- REST 有统一接口和超文本驱动,耦合度最小。
REST 与 CRUD 及 HTTP 方法的对应
REST 遵循 CRUD 原则,通过四种基本操作处理资源:
这种设计降低了复杂性,提高了系统的可伸缩性。
Version Control - 版本控制系统
(内容待补充)
Code Review - 代码审查工具
SourceAnalysis(StyleCop) 的终极目标是让所有人都能写出优雅和一致的代码,因此这些代码具有很高的可读性。
它不是代码格式化工具,而是代码规范检查工具,检查范围包括:
- 代码格式
- 命名规范
- 注释规范
目的:帮助团队执行一系列常用的源代码格式规范,确保代码布局规整、易读、易维护且文档良好。
目前包含约 200 个 最佳实践规则,与 Visual Studio 2005/2008 的默认代码格式化规则一致。
- 官网:StyleCop
Web Server
Nginx 是一款轻量级的:
- Web 服务器
- 反向代理服务器
- 电子邮件代理服务器(IMAP/POP3)
开源,基于 BSD-like 协议发行。