什么是REST外文翻译资料

 2022-02-23 20:15:02

What is REST?

The term REST comes from Roy Fielding#39;s PhD dissertation, published in 2000, and

it stands for REpresentational State Transfer. REST by itself is not an architecture;

REST is a set of constraints that, when applied to the design of a system, creates

a software architectural style. If we implement all the REST guidelines outlined

in Fielding#39;s work, we end up with a system that has specific roles for data,

components, hyperlinks, communication protocols, and data consumers.

Fielding arrived at REST by evaluating all networking resources and technologies

available for creating distributed applications. Without any constraints, anything and

everything goes, leading us to develop applications that are hard to maintain and

extend. With this in mind, he looks at document distributed application architectural

styles beginning with what he calls the null space—which represents the availability

of every technology and every style of application development with no rules or

limits—and ends with the following constraints that define a RESTful system:

bull; It must be a client-server system

bull; It has to be stateless—there should be no need for the service to keep users#39;

sessions; in other words, each request should be independent of others

This material is copyright and is licensed for the sole use by Jillian Fraser on 20th November 2009

RESTful Architectures

[ 8 ]

bull; It has to support a caching system—the network infrastructure should

support cache at different levels

bull; It has to be uniformly accessible—each resource must have a unique address

and a valid point of access

bull; It has to be layered—it must support scalability

bull; It should provide code on demand—although this is an optional constraint,

applications can be extendable at runtime by allowing the downloading of

code on demand, for example, Java Applets

These constraints don#39;t dictate what kind of technology to use; they only define how

data is transferred between components and what are the benefits of following the

guidelines. Therefore, a RESTful system can be implemented in any networking

architecture available. More important, there is no need for us to invent new

technologies or networking protocols: we can use existing networking infrastructures

such as the Web to create RESTful architectures. Consequently, a RESTful

architecture is one that is maintainable, extendable, and distributed.

Before all REST constraints were formalized, we already had a working example

of a RESTful system: the Web. We can ask, then, why introduce these RESTful

requirements to web application development when it#39;s agreed that the Web is

already RESTful.

We need to first qualify here what it#39;s meant for the Web to be RESTful. On the one

hand, the static web is RESTful, because static websites follow Fielding#39;s definition of

a RESTful architecture. For instance, the existing web infrastructure provides caching

systems, stateless connection, and unique hyperlinks to resources, where resources

are all of the documents available on every website and the representations of these

documents are already set by files being browser readable (HTML files, for example).

Therefore, the static web is a system built on the REST-like architectural style.

On the other hand, traditional dynamic web applications haven#39;t always been

RESTful, because they typically break some of the outlined constraints. For instance,

most dynamic applications are not stateless, as servers require tracking users

through container sessions or client-side cookie schemes. Therefore, we conclude

that the dynamic web is not normally built on the REST-like architectural style.

We can now look at the abstractions that make a RESTful system, namely resources,

representations, URIs, and the HTTP request types that make up the uniform

interface used for client/server data transfers.

This material is copyright and is licensed for the sole use by Jillian Fraser on 20th November 2009

Chapter 1

[ 9 ]

Resources

A RESTful resource is anything that is addressable over the Web. By addressable,

we mean resources that can be accessed and transferred between clients and servers.

Subsequently, a resource is a logical, temporal mapping to a concept in the problem

domain for which we are implementing a solution.

These are some examples of REST resources:

bull; A news story

bull; The temperature in NY at 4:00 p.m. EST

bull; A tax return stored in IRS databases

bull; A list of code revisions history in a repository like SVN or CVS

bull; A student in some classroom in some school

bull; A search result for a particular item in a web index, such as Google

Even though a resource#39;s mapping is unique, different requests for a resource can

return the same underlying binary representation stored in the server. For example,

let#39;s say we have a resource within the context of a publishing system. Then, a

request for 'the latest revision published' and the request for 'revision number 12'

will at some point in time return the same representation of the resource: the last

revision is revision 12. However, when the latest revision published is increased

to version 13, a request to the latest revision will return version 13, and a request

for revision 12 will continue returning version 12. As resources in a RESTful

architecture, each of these resources can be accessed directly and independently,

but different requests could point to the same data.

Because we ar

剩余内容已隐藏,支付完成后下载完整资料


什么是REST?

REST这个术语来自Roy Fielding的博士论文,发表于2000年,它代表了REpresentational State Transfer。 REST本身不是架构; REST是一组约束,当应用于系统设计时,会创建软件架构风格。如果我们实现Fielding工作中概述的所有REST准则,我们最终会得到一个对数据,组件,超链接,通信协议和数据使用者具有特定角色的系统。

Fielding通过评估可用于创建分布式应用程序的所有网络资源和技术来到REST。没有任何限制,任何事情都会发生,导致我们开发难以维护和扩展的应用程序。考虑到这一点,他着眼于文档分布式应用程序架构样式,从他称之为零空间开始 - 它代表了每种技术的可用性以及没有规则或限制的每种应用程序开发风格 - 并以以下约束定义了RESTful系统:

bull;它必须是客户端 - 服务器系统

bull;它必须是无国籍的 - 服务不应该保持用户的访问;换句话说,每个请求应该独立于其他请求。

bull;它必须支持缓存系统 - 网络基础架构应支持不同级别的缓存

bull;必须统一访问 - 每个资源必须具有唯一的地址和有效的访问点

bull;它必须是分层的 - 它必须支持可扩展性

bull;它应该按需提供代码 - 尽管这是一个可选约束,但是应用程序可以在运行时通过允许按需下载代码来扩展,例如,Java Applets这些约束并不决定使用何种技术;他们只定义了如何在组件之间传输数据,以及遵循指南的好处是什么。因此,RESTful系统可以在任何可用的网络体系结构中实现。更重要的是,我们无需发明新技术或网络协议:我们可以使用现有的网络基础设施(如Web)来创建RESTful架构。因此,RESTfularchitecture是可维护,可扩展和分布式的。

在所有REST约束正式化之前,我们已经有了一个RESTful系统的工作示例:Web。然后,我们可以问,为什么在同意Web已经是RESTful时将这些RESTful要求引入到Web应用程序开发中。

我们需要首先在这里确定Web对RESTful的意义。一方面,静态Web是RESTful,因为静态网站遵循Fielding对RESTful架构的定义。例如,现有的Web基础结构提供了缓存系统,无状态连接和对资源的唯一超链接,其中资源是每个网站上可用的所有文档,并且已经由浏览器可读的文件(例如,HTML文件)设置了文档的表示。

因此,静态Web是基于类似REST的架构风格的系统。

另一方面,传统的动态Web应用程序并不总是令人满意,因为它们通常会破坏一些概述的约束。例如,大多数动态应用程序不是无状态的,因为服务器需要通过容器会话或客户端cookie方案跟踪用户。因此,我们得出结论,动态Web通常不建立在类似REST的架构风格上。

我们现在可以查看构成RESTful系统的抽象,即资源,表示,URI和构成用于客户端/服务器数据传输的uniforminterface的HTTP请求类型。

资源

RESTful资源是可通过Web寻址的任何资源。通过可寻址,我们指的是可以在客户端和服务器之间访问和传输的资源。

随后,资源是我们正在为其实现解决方案的问题域中的概念的逻辑时间映射。

以下是REST资源的一些示例:

bull;新闻报道

bull;纽约时间下午4点的温度美东时间

bull;存储在IRS数据库中的纳税申报表

bull;SVN或CVS等存储库中的代码修订历史列表

bull;某个学校某个教室的学生

bull;Web索引中特定项目的搜索结果,例如GoogleEven,虽然资源的映射是唯一的,但对资源的不同请求可以返回存储在服务器中的相同基础二进制表示。例如,假设我们在发布系统的上下文中有一个资源。然后,“发布的最新版本”和“版本号12”的请求将在某个时间点返回相同的资源表示:lastrevision是版本12.但是,当发布的最新版本增加到版本13时,对最新版本的请求将返回版本13,并且版本12的请求将继续返回版本12.作为RESTfularchitecture中的资源,可以直接且独立地访问这些资源中的每一个,但是不同的请求可以指向相同的数据。

因为我们使用HTTP进行通信,所以我们可以传输任何可以在客户端和服务器之间传递的信息。例如,如果从CNN请求文本文件,我们的浏览器会收到一个文本文件。如果我们从YouTube请求Flashmovie,我们的浏览器会收到Flash电影。通过TCP / IP在两种情况下流式传输数据,并且浏览器知道如何解释二进制流,因为HTTP协议响应头Content-Type。因此,在一个有效的系统中,资源的表示取决于调用者所需的类型(MIME类型),该类型是在通信协议的请求中指定的。

表示

资源的表示是在客户端和服务器之间来回发送的。表示是在请求时位于某个存储设备中的实际数据的时间状态。一般而言,它是一个二进制流及其元数据,描述了客户端或服务器如何使用流(元数据还可以包含有关资源的额外信息,例如,验证,加密信息或额外代码)在运行时执行)。

在Web服务的整个生命周期中,可能有各种客户端请求资源。不同的客户端能够使用相同资源的不同表示。因此,表示可以采用各种形式,例如图像,文本文件或XML流或JSON流,但必须通过相同的URI可用。

对于通过Web浏览器的人工生成的请求,表示通常是HTML页面的形式。对于来自其他Web服务的自动请求,可读性并不重要,可以使用更高效的表示形式,例如XML。

URI

RESTful Web服务中的统一资源标识符(URI)是到源的超链接,它是客户端和服务器交换表示的唯一方法。

RESTful约束集并未规定URI必须是超链接。我们只讨论RESTful URI是超链接,因为我们使用Web来创建web服务。如果我们使用一组不同的支持技术,RESTfulURI看起来会完全不同。然而,可寻址性的核心思想仍将存在。

在RESTful系统中,URI并不意味着随着时间的推移而改变,因为体系结构的实现是管理服务,定位资源,协商存在,然后使用所请求的资源发回响应。更重要的是,如果我们要在服务器级别更改存储设备的结构(例如,交换数据库服务器),我们的URI将保持不变并且只要Web服务在线或资源的上下文不是有效的改变。

如果没有REST约束,则按位置访问资源:典型的Web地址是固定的URI。例如,如果我们在Web服务器上重命名文件,则URI将是不同的;如果我们将文件移动到Web服务器中的不同目录树,则URI将会更改。请注意,我们可以修改我们的Web服务器以在运行时执行重定向以保持可寻址性,但如果我们为每个文件更改执行此操作,我们的规则将变得难以管理。

通过HTTPrequests统一接口

在前面的部分中,我们介绍了资源和表示的概念。

我们说资源是在客户端和服务器之间交换的实际实体状态的映射。此外,我们讨论了通过通信协议atruntime-through HTTP在客户端和服务器之间协商表示。在本节中,我们将详细介绍交换这些表示的含义,以及客户端和服务器对这些资源执行操作的含义。

开发RESTful Web服务类似于我们使用Web应用程序一直在做的事情。但是,现代和传统Web应用程序开发之间的根本区别在于我们如何看待在数据抽象上采取的动作。具体而言,现代发展植根于名词的概念(资源交换);遗留发展植根于动词的概念(对数据采取远程行动)。对于前者,我们正在实施RESTful Web服务;对于后者,我们正在实施类似于RPC的服务(远程过程调用)。更重要的是,RESTful服务通过资源的表示来修改数据的状态;另一方面,RPC服务隐藏数据表示,而是发送命令来修改服务器级别的数据状态(我们永远不知道数据是什么样的)。

最后,在现代Web应用程序开发中,我们限制了设计和实现的模糊性,因为我们有四个特定的操作可以占用资源 - 创建,检索,更新和删除(CRUD)。另一方面,在传统的Web应用程序开发中,我们可以使用非命名或实现标准进行无数的操作。

因此,通过描述资源和表示的角色,我们现在可以将我们的CRUD操作映射到HTTP方法POST,GET,PUT和DELETE,如下所示:

在最简单的形式中,RESTful Web服务是操作资源状态的网络应用程序。在此上下文中,资源操作意味着资源的创建,检索,更新和删除。但是,RESTful Web服务不仅限于这四种基本数据操作概念。相反,RESTful Web服务可以在服务器级别执行逻辑,但是记住每个结果必须是手头域的资源表示。

统一的界面使所有上述抽象成为焦点。因此,将所有这些概念放在一起我们可以用一个简短的句子描述可靠的开发:我们使用URI来连接客户端和服务器以表示形式交换资源。

现在让我们详细查看四种HTTP请求类型,看看它们是如何用于交换表示来修改资源状态的。

GET /检索

方法GET用于检索资源。

在深入研究HTTP GET请求的实际机制之前,首先,我们需要确定我们的Web服务上下文中的资源是什么以及我们要交换的代表类型。

对于本节的其余部分,我们将在某个教室中使用Web服务处理学生的人工示例,其位置为http://restfuljava.com/。对于此服务,我们假设学生的XML表示如下所示:

lt;学生gt;

lt;名称gt;简lt;/名称gt;

lt;年龄gt; 10 lt;/年龄gt;

lt;链路gt; /生/简lt;/链路gt;

lt;/学生gt;

还有一个学生列表:

lt;学生gt;

lt;学生gt;

lt;名称gt;简lt;/名称gt;

lt;年龄gt; 10 lt;/年龄gt;

lt;链路gt; /生/简lt;/链路gt;

lt;/学生gt;

lt;学生gt;

lt;名称gt;约翰lt;/名称gt;

lt;年龄gt; 11 lt;/年龄gt;

lt;链接gt; /学生/约翰·lt;/链接gt;

lt;/学生gt;

lt;链路gt; /生lt;/链路gt;

lt;/ studentsgt;通过定义我们的表示,我们现在假设http://restfuljava.com/students形式的URI来访问学生列表,并且http://restfuljava.com/students/ {name}来访问特定的有价值名称的唯一标识符的学生。

我们现在可以开始向我们的Web服务发出请求。例如,如果我们想要一个名为Jane的学生的记录,我们会向URI http://restfuljava.com/students/Jane发出请求。在请求时,Jane的表示可能如下所示:

lt;学生gt;

lt;名称gt;简lt;/名称gt;

lt;年龄gt; 10 lt;/年龄gt;

lt;链路gt; /生/简lt;/链路gt;

lt;/学生gt;

随后,我们可以通过URI http://restfuljava.com/students访问学生列表。来自服务的回复将包含所有学生的代表,并且可能看起来像(假设有两名学生可用):lt;学生gt;

lt;学生gt;

lt;名称gt;简lt;/名称gt;

lt;年龄gt; 10 lt;/年龄gt;

lt;链路gt; /生/简lt;/链路gt;

lt;/学生gt;

lt;学生gt;

lt;名称gt;约翰lt;/名称gt;

lt;年龄gt; 11 lt;/年龄gt;

lt;链接gt; /学生/约翰·lt;/链接gt;

lt;/学生gt;

lt;链路gt; /生lt;/链路gt;

lt;/学生gt;

现在让我们看看请求详细信息。检索Jane资源的请求使用带有URI的GET方法http://restfuljava.com/students/Jane

这里发生了什么?

1. Java客户端使用方法类型GET和Jane作为学生的标识符发出HTTP请求。

2.客户端通过Acceptrequest头字段设置它可以处理的表示类型。

3. Web服务器接收并解释GET请求为检索。此时,Web服务器将控制权传递给RESTful框架以处理请求。请注意,RESTful框架不会自动检索资源,因为这不是他们的工作。框架的工作是简化REST约束的实现。业务逻辑和存储实现是特定于域的Java代码的角色。

4.服务器端程序查找Jane资源。查找资源可能意味着在数据库,文件系统或对不同网络服务的调用中查找它。

5.一旦程序找到Jane,它就会将资源的二进制数据转换为客户端请求的表示。

6.将表示转换为XML,服务器发回一个HTTP响应,其数字代码为200,XML表示形式为有效负载。请注意,如果有任何错误,HTTP服务器会报告正确的数字代码,但是由客户端来正确处理故障。

客户端和服务器之间的所有消息都是标准的HTTP协议调用。 Forevery检索操作,我们发送一个GET请求,然后我们得到一个HTTP响应,响应

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[441291],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。