REST定义了应该如何正确地使用(这和大多数人的实际使用方式有很大不同)Web标准,例如HTTP和URI。如果你在设计应用程序时能坚持REST原则,那就预示着你将会得到一个使用了优质Web架构(这将让你受益)的系统。总之,五条关键原则列举如下:
为所有“事物”定义ID
将所有事物链接在一起
使用标准方法
资源多重表述
无状态通信
下面让我们进一步审视这些原则。
1. 为所有“事物”定义ID
使用URI标识所有值得标识的事物,特别是应用中提供的所有“高级”资源,无论这些资源代表单一数据项、数据项集合、虚拟亦或实际的对象还是计算结果等。
2. 将所有事物链接在一起
使用URI表示链接的优雅之处在于,
链接可以指向由不同应用、不同服务器甚至位于另一个大陆上的不同公司提供的资源——因为URI命名规范是全球标准,构成Web的所有资源都可以互联互通。
3. 使用标准方法
class Resource {
Resource(URI u);
Response get();
Response post(Request r);
Response put(Request r);
Response delete();
}
由于所有资源使用了同样的接口,你可以依此使用GET方法检索一个表述(representation)——也就是对资源的描述。因为规范中定义了GET的语义,所以可以肯定当你调用它的时候不需要对后果负责——这就是为什么可以“安全”地调用此方法。GET方法支持非常高效、成熟的缓存,所以在很多情况下,你甚至不需要向服务器发送请求。还可以肯定的是,GET方法具有幂等性[译注:指多个相同请求返回相同的结果]——如果你发送了一个GET请求没有得到结果,你可能不知道原因是请求未能到达目的地,还是响应在反馈的途中丢失了。幂等性保证了你可以简单地再发送一次请求解决问题。幂等性同样适用于PUT(基本的含义是“更新资源数据,如果资源不存在的话,则根据此URI创建一个新的资源”)和DELETE(你完全可以一遍又一遍地操作它,直到得出结论——删除不存在的东西没有任何问题)方法。POST方法,通常表示“创建一个新资源”,也能被用于调用任意过程,因而它既不安全也不具有幂等性。
4. 资源的多重性表述
如果客户程序对HTTP应用协议和一组数据格式都有所“了解”,那么它就可以用一种有意义的方式与世界上任意一个RESTful HTTP应用交互。不幸的是,我们不可能拿到所有东西的标准格式,但是,或许我们可以想到在公司或者一些合作伙伴中使用标准格式来营造一个小环境。当然以上情况不仅适用于从服务器端到客户端的数据,反之既然——倘若从客户端传来的数据符合应用协议,那么服务器端就可以使用特定的格式处理数据,而不去关心客户端的类型。
5. 无状态通信
服务器端不能保持除了单次请求之外的,任何与其通信的客户端的通信状态。这样做的最直接的理由就是可伸缩性—— 如果服务器需要保持客户端状态,那么大量的客户端交互会严重影响服务器的内存可用空间(footprint)。(注意,要做到无状态通信往往需要需要一些重新设计——不能简单地将一些session状态绑缚在URI上,然后就宣称这个应用是RESTful。)
关于REST
REST在本质上是一个可以被许多不同技术实现的高层次的风格,而且可以被实例化——通过为它的抽象特性赋上不同的值。比如,REST中包含资源和统一接口的概念——也就是说,所有资源都应该对这些相同的方法作出反应。但是REST并没有说明是哪些方法,或者有多少方法。
REST风格的一个“化身”便是HTTP(以及一套相关的一套标准,比如URI),或者稍微抽象一些:Web架构自身。接着上面的例子,HTTP使用HTTP动词作为REST统一接口的“实例”。由于Fielding是在Web已经(或者至少是大部分)“完善”了之后才定义的REST风格,有人可能会争论两者是不是100%的匹配。但是无论如何,整体上来说Web、HTTP和URI仅仅是REST风格的一个主要实现。
分享到:
相关推荐
- **高级话题**:探讨如何利用REST构建复杂的应用程序和服务,包括高级用例中的超媒体驱动流程等。 通过以上内容可以看出,《REST实战(REST in Practice)》不仅是一本介绍REST基本概念和技术的书籍,更重要的是它...
REST客户端是一款专为自动化测试RESTful API设计的工具,它以Java编程语言为基础,与知名的Postman工具在功能上有着相似之处。REST(Representational State Transfer)是一种广泛应用于Web服务的架构风格,它强调...
Rest.li是LinkedIn开源的一个强大的RESTful服务开发框架,专门针对JSON数据交换设计。它提供了一套全面的解决方案,用于构建可扩展、健壮且类型安全的API。在深入理解Rest.li之前,我们先来了解一些基本概念。 REST...
REST(Representational State Transfer),即“表征状态转移”,是由Roy Fielding博士在其2000年的博士论文中提出的一种软件架构风格。REST强调基于网络的分布式系统的松耦合设计,并推崇无状态通信机制。在理解...
在Kettle中,REST接口提供了一种灵活的方式与外部系统进行通信,例如,发送和接收JSON数据,执行各种操作。本教程将深入探讨如何使用Kettle与RESTful服务进行交互。 首先,我们要理解REST(Representational State ...
在Delphi XE中利用DataSnap构建REST服务器是一项强大的技术,可以帮助开发者创建高效、可扩展的Web服务。本文将深入探讨这一主题,介绍REST(Representational State Transfer)架构原理,以及如何在Delphi环境中...
在IT行业中,REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,主要用于Web服务的构建。RESTful服务接口以其简洁、高效的特点,被广泛应用于分布式系统和互联网应用...
OpenDaylight REST API 是一个基于 Representational State of Resource (REST) 架构风格的应用程序接口,提供了一种统一的方式来与 OpenDaylight 控制器交互。 OpenDaylight REST API 使得开发人员可以使用标准的 ...
通常来说,了解REST API的实战应用,还需要掌握诸如版本控制、身份验证、授权以及如何处理复杂的业务逻辑等高级话题。 在当前信息中,我们没有获取到关于网络协议、编程语言或具体技术实现的细节,但它们都是实现...
- **背景**: REST(Representational State Transfer)是 Web 服务领域的一个重要概念,尤其在过去十年中,随着 Web 2.0 的发展而变得日益重要。REST 提供了一种简单且灵活的方式来构建 Web 服务,它使用诸如 HTTP ...
重点阐述了如何将REST作为媒介来实现SOA的战略目标,通过对REST服务的建模流程和专为REST服务定制的面向服务的分析和设计流程的详细讲解,逐步向读者展开了一幅REST与SOA在企业级解决方案中完美“联姻”的画卷。...
REST(Representational State Transfer,表述性状态转移)是一种软件架构风格,主要应用于Web服务的设计,以提供简洁、无状态、基于标准的接口。REST Web Service是遵循REST原则的Web服务,它通过HTTP协议来实现...
REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,通过URI(统一资源标识符)来定位资源,并使用HTTP方法(如GET、POST、PUT、DELETE等)来操作这些资源。REST API被...
REST(Representational State Transfer,表述性状态转移)是一种软件架构风格,用于构建Web服务,尤其适用于互联网应用程序。REST服务基于HTTP协议,通过URI(统一资源标识符)来定位资源,并使用HTTP方法(如GET、...
首先,REST(Representational State Transfer,表现层状态转移)是一种网络应用程序的设计风格和开发方式,常用于提供Web服务。在GIS领域,REST地图服务允许客户端通过HTTP协议请求地图资源,如地图图层、图元等,...
Restlet项目为“建立REST概念与Java类之间的映射”提供了一个轻量级而全面的框架。它可用于实现任何种类的REST式系统,而不仅仅是REST式Web服务。 Restlet项目受到Servlet API、JSP(Java Server Pages)、...
cpprest库,全称是Casablanca,是由微软开发的一个C++ REST(Representational State Transfer)编程库,主要用于构建云应用和服务之间的通信。cpprest库提供了轻量级、高效且易于使用的API,使得开发者可以方便地...
REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,...
【标题】"dubbox 2.8.4 rest调用" 涉及到的是一个基于当当网开源框架dubbox实现RESTful API调用的项目实例。dubbox是Dubbo的一个分支,它在原Dubbo的基础上增加了更多的功能,包括对RESTful服务的支持。REST...