RESTful 架构基础


RESTful 架构基础

文章插图
 
 
来自:唐尤华译自:https://dzone.com/refcardz/rest-foundations-restful
 
REST(Representational State Transfer)架构风格是一种世界观,把信息提升为架构中的一等公民 。通过 REST 可以实现系统的高性能、可伸缩、通用性、简单性、可修改性和可扩展等特性 。这篇文章解释了主要的 HTTP 操作,对 HTTP 响应码进行描述,并列举相关开发库和框架 。此外,本文还提供了额外的资源,对每个主题进行了更深入的探讨 。
1. 简介
REST 架构风格不是一种可以购买的技术,也不是一个可以添加到软件开发项目中的开发库 。首先也是最重要的,REST 是一种世界观,把将信息提升为构建架构中的一等公民 。
Roy Fielding 的博士论文“架构风格和基于网络的软件架构设计”介绍和整理了“RESTful”系统的思想和相关术语 。这是一篇学术论文,虽然使用正式语言,但是仍然易于理解并且提供了实践基础 。
总结一下,RESTful 通过体系结构的特定选择能从部署的系统中获得理想特性 。尽管这种风格定义的约束细节并没有为所有场合设计,但是的确可以广泛适用 。
由于 Web 对消费者偏好有多重影响,REST 风格的倡导者鼓励企业组织在其边界内使用相同原则,就像他们在面向外部客户的网页上做的那样 。本文将讨论现代 REST Web 实现中的基本约束和属性 。
1.1 基础概念
REST 表示什么含义?以无状态方式传输、访问和操作文本数据 。当正确部署后,REST 为互联网上不同应用程序之间提供了一致的互操作性 。无状态(stateless)这个术语至关重要,它使得应用程序可以用不可知的方式进行通信 。RESTful API 通过统一资源定位符地址(URL)公开服务 。URL 名称将资源的区分为接受内容或返回内容 。RFC 1738中定义了 URL scheme,可以在这里找到: https://tools.ietf.org/rfc/rfc1738.txt
RESTful URL 类似于下面这个 library API:
http://fakelibrary.org/library 
实际公开的不一定是某种任意的服务,而是代表对消费者有价值的信息资源 。URL 作为资源句柄,可以请求、更新或删除内容 。
开始把服务发布到某个地方,然后开始与 REST 服务进行交互 。返回的内容可能是 XML、JSON 格式,或者更确切地说是像 Atom 或自定义 MIME 类型等超媒体格式 。虽然一般建议尽可能重用现有的格式,但是对正确设计的媒体类型正在变得越来越宽容 。
需要请求资源的时候,客户机会发一个超文本传输协议(HTTP)GET 请求,例如在浏览器中键入一个 URL 然后点击回车,选择书签,或者点击锚引用链接 。
通过编程方式与 RESTful API 交互,有数十个客户端 API 或工具可供选择 。使用 curl 命令行工具,可以输入以下命令:
$ curl http://fakelibrary.org/library 
上面的命令使用默认格式,但你可能不需要这种格式的信息 。幸运的是 HTTP 有一种机制,可以指定返回信息的格式 。在请求中指定 "Accept" 头,如果服务器支持这种格式,会以指定的格式返回 。这个过程称为内容协商,这是 HTTP 中未被充分利用的功能之一,可以使用一个类似于上面例子中的 curl 命令来指定:
$ curl –H "Accept:Application/json" http://fakelibrary.org/library 
由于资源名称与内容格式是独立的,从而让请求不同格式信息成为可能 。虽然 REST 中的 “R” 的含义是 “表现”而非“资源”,但是应该在构建系统时允许客户端指定请求的内容格式,请牢记这一点 。在我们的例子中 library API 可能包含以下 URL: