我希望清楚地理解上述术语代表什么,它们的具体定义,它们的共性和差异,优点和缺点,最重要的是底线 – 为了适当地使用这些术语而要记住的最重要的事情.
免责声明:这篇文章的大部分都是主观的.这里没有尝试严格定义任何内容,只是尝试上下文化并对概念及其相互关系进行全局概述.I thought I knew what REST/”RESTFul”, restfulservices, webservices,
SOA and microservices
我要说所有这些术语都属于面向服务的体系结构(SOA)的范畴. Web服务是使用Web相关技术的SOA. REST及其子集RESTful是一组实现Web服务的实践.最后,微服务是一组新的SOA实践.
I hope to have a clear understanding of what the aforementioned terms
represent
我将尝试解决这一问题,但使用非正式的定义,而不是进入优点和缺点.这太长了,我认为从解释中可以看出最重要的一点.
SOA
在这种情况下,我认为这个名称是不言自明的:SOA – 代表面向服务的体系结构 – 指的是专注于服务的体系结构.现在,这里棘手的部分是您可能会或可能不会考虑服务,这是一个完全不同的主题.
网页服务
这解释了使用Web相关技术的SOA子集.这通常涉及HTTP和XML,但它也可以使用FTP.我认为web这个术语很模糊,因为它通常指的是标准的互联网技术.
REST(FUL)
REST是Web服务的一个子集 – 因此也是SOA – 围绕使用HTTP进行通信.有一些常见的做法,例如与URL有某种特定的相关性.
大约10年前,当我被介绍到REST时,RESTful作为一个更严格的REST实现呈现给我,其中资源将具有唯一的URI,并且它将通过映射到HTTP谓词的CRUD操作进行管理 – Create = POST,Read = GET,Update = PUT,删除=删除.
通过HTTP GET或POST请求更新用户信息o / users / 1 / update URL在REST中完全有效,但它不是RESTful.对于后者,方法是在/ users / 1上使用HTTP PUT or PATCH(这也是其余操作的URL,只是改变HTTP动词).
我发现多年来这种区别变得模糊.但是,RESTful仍然是REST的一个更严格的子集. (具体要求可能有争议.)
编辑 – 一个更正式的定义:
REST代表Representational State Transfer,presented by Roy Fielding in his Ph.D. thesis是分布式超媒体系统的架构风格.重点在于超媒体和自我遏制将客户与大多数事前知识脱钩.网站就是一个例子:它包含一个URI(网站根目录)和一个媒体类型(HTML),服务器通过它提供客户端在资源和所有可能的交互方面所需的所有信息.
我会说99%的人谈论REST真的意味着RPC or HTTP-based interfaces:使用HTTP端点来调用某些操作或查询数据.守备自己has tried to clarify this.由一组预定义URL构成的任何API都需要某些HTTP动词和一些参数才能达到99%.我上面的描述也是如此.但是,我怀疑这个术语本身能否在其滥用中存活下来,我认为我们必须接受它的新含义.
微服务
这是最近的一个术语;它促进将应用程序实现为一组简单的可独立部署的服务.这与SOA体系结构的经典方法形成对比,后者是用于构建复杂系统的一组非常复杂的服务,简单地涉及企业服务总线.但是,需要注意的是,尽管SOA通常与此类系统相关联,但它是一个更广泛的术语,实际上,微服务也是SOA的一个子集.
微服务通常与现代JavaScript全栈一起出现 – 即从所有垂直组件使用JavaScript,从服务器到用户界面.可以说是这样,因为使用这些JavaScripts全栈可以加快开发速度,这归功于简化的集成.这些堆栈以及使用它们实现的微服务通常都是通过REST构建的,但从理论的角度来看,没有什么能阻止您使用不同的方法来实现相同的理念.