33

我以为我知道 REST/“RESTFul”、restfulservices、webservices、SOA 和微服务是什么,但我遇到了太多不同的定义,以至于我得出的结论是这些术语被过度使用、误用或简单地定义不当。

我希望对上述术语的含义,它们的具体定义,它们的共性和差异,优缺点,以及最重要的底线 - 为了正确使用这些术语而要记住的最重要的事情有一个清晰的理解。

4

2 回答 2

27

免责声明:这篇文章的大部分内容都是主观的。这里没有试图严格定义任何东西,只是试图将概念置于上下文中并给出概念的全局概述以及它们如何相互关联。

我以为我知道 REST/“RESTFul”、restfulservices、webservices、SOA 和微服务

我想说所有这些术语都属于面向服务的体系结构(SOA) 的范畴。Web 服务是使用 Web 相关技术的 SOA。REST 及其子集 RESTful 是一组实现 Web 服务的实践。最后,微服务是一组新的 SOA 实践。

我希望对上述术语所代表的含义有一个清晰的了解

我将尝试解决这一点,但使用非正式的定义,而不涉及优点和缺点。那太长了,我认为最大的观点应该从解释中显而易见。

SOA

我认为这个名字在这种情况下是不言自明的:SOA——代表面向服务的架构——指的是以服务为中心设计的架构。现在,这里棘手的部分是您可能会或可能不会考虑服务,这是一个完全不同的话题。

网页服务

这说明了使用 Web 相关技术的 SOA 子集。这通常涉及 HTTP 和 XML,但也可以使用 FTP。我认为这里的网络一词非常模糊,因为它通常指的是标准的互联网技术。

休息(满)

REST 是 Web 服务的子集——因此也是 SOA——围绕使用 HTTP 进行通信。有一组特定的常见做法,例如与 URL 的特定相关性。

大约 10 年前,当我被介绍给 REST 时,RESTful 被作为一种更严格的 REST 实现呈现给我,其中资源将具有唯一的 URI,并且将通过映射到 HTTP 动词的 CRUD 操作进行管理——创建 = POST,读取 =获取,更新 = 放置,删除 = 删除

通过 HTTP GET 或 POST 请求或/users/1/updateURL 更新用户信息在 REST 中完全有效,但它不是 RESTful。对于后者,方法是使用 HTTP PUT 或 PATCH over /users/1(这也是其余操作的 URL,只是改变 HTTP 动词)。

我发现多年来,这种区别已经变得模糊。然而,RESTful 仍然是 REST 的一个更严格的子集。(具体要求可能有争议。)

编辑 - 更正式的定义:

REST 代表Representational State Transfer由 Roy Fielding 在他的博士论文中提出。论文作为分布式超媒体系统的架构风格。重点进入超媒体和自我控制,使客户与大多数事先了解的知识脱钩。一个网站就是一个例子:它由一个单一的 URI(网站根目录)和一个媒体类型 (HTML) 组成,服务器通过它提供客户端所需的有关资源和所有可能交互的所有信息。

我想说 99% 的人谈论 REST 的真正意思是RPC 或基于 HTTP 的接口:使用 HTTP 端点来调用某些操作或查询数据。菲尔丁本人曾试图澄清这一点。由一组预定义的 URL 组成的任何 API 都需要某些 HTTP 动词和一些参数,都属于这 99%。我上面的描述也是如此。然而,我怀疑这个词本身能否在它的误用中幸存下来,我认为我们必须接受它的新含义。

微服务

这是最近的术语;它提倡将应用程序实现为一组简单的可独立部署的服务。这与 SOA 架构的经典方法形成鲜明对比,SOA 架构是一组用于构建复杂系统的非常复杂的服务,通常涉及企业服务总线。然而,重要的是要注意,尽管 SOA 通常与此类系统相关联,但它是一个更广泛的术语,实际上,微服务也是 SOA 的一个子集。

微服务通常与现代 JavaScript 全栈一起出现——即,从服务器到用户界面的所有垂直组件都使用 JavaScript。可以说之所以如此,是因为使用这些 JavaScript 的全栈可以加快开发速度,这要归功于简化的集成。这些堆栈以及因此使用它们实现的微服务通常是通过 REST 构建的,但从理论的角度来看,没有什么能阻止您使用不同的方法来实现相同的理念。

于 2014-11-28T16:22:35.070 回答
4

让我向您介绍这些术语的分类学观点:

微服务

是由最小责任专门化的服务的子类型。

网页服务

也是服务的子类型,根据它们提供的服务类型进行专门化,属于 Web 要求和需求。

SOA

是架构的一个子类型,因此是一些组件及其关系的结构视图,其中恰好是服务和这些服务之间的通信。

休息

是通信的子类型,底层http协议。

宁静的

是架构的一个子类型(一些组件及其关系的结构视图),其中专门由组件之间的关系限制为其余通信。

于 2017-01-31T10:20:50.127 回答