REST与RESTful Web服务

时间:2016-09-19 20:16:21

标签: web-services rest architecture soa

Is REST the future for SOA:

  

SOA架构风格是基于功能分解的   企业业务架构和介绍两个高层次   抽象:企业业务服务和业务流程......   另一方面,REST是一组表达的架构指南   作为资源导向架构(ROA)。 ROA基于资源的概念;   ...... 使用真正的REST构建SOA系统是不可能的。

  

REST Web服务方法是一种纯粹使用REST的方法   构建SOA的通信技术。在这种情况下,服务是   使用SOA样式分解和基于REST的Web服务定义   被用作运输工具。

您能否详细解释最后一句话?他们是否意味着RESTful Web服务与REST不同,或者不仅仅是REST还是什么?使用REST作为通信技术意味着什么?它们是什么意思"基于REST的Web服务被用作传输"?

更新:for tonicsoft回答

因为你不能用纯REST构建SOA(就像纯名词的句子)我想知道在REST中安排应用程序部分的正确方法是什么适当的,不在哪里?我应该将REST部分与非REST部分分开吗?如何不-REST部分应该相互通信以及与REST部分进行通信?

2 个答案:

答案 0 :(得分:2)

是的,文章指出REST与" RESTful Web服务"不同。

作者将REST与" nouns"而不是动词,或者" DBMS"的网络。我可以不用动词写一个句子吗?不能。我可以仅使用DBMS构建系统吗?不可以。同样,人们不能仅使用REST架构原则构建系统。在大多数系统中,REST语义最终会崩溃。本文中给出的一个示例是需要消息传递解决方案。

我认为作者正在说一个" RESTful Web服务"是整个句子,而REST只是名词。在" RESTful Web服务"中,系统中没有REST语义的部分(基本上不是CRUD的任何部分)可以使用在纯REST组件的实现中常见的类似技术和编程样式来实现

" REST作为一种通信技术"基本上只是意味着将服务的传输实现限制为HTTP。大多数Web服务框架为传输提供了多个选项(例如,WCF可以通过HTTP执行SOAP,或者使用共享内存,或TCP用于没有HTTP的网络服务)。 REST避免了这种灵活性,有利于简化。一个" RESTful Web服务"根据我对所引用文章的解释,它将纯粹基于HTTP。

总之,REST只是一种架构风格。仅使用一种建筑风格就无法构建任何技术解决方案。因此,一个" RESTful Web服务"是一种简单的Web服务,可以在适当的情况下利用REST架构原则。

同样,这不是我的观点,只是我对文章所说内容的解释。

如何从其余的" RESTful Web服务"

中分离纯REST操作

我认为纯粹的" REST"之间不需要任何特别的分离。端点(CRUD)和更多行为/服务导向的端点,除了任何给定的URL应该是一个或另一个的事实,你可能会发现你不想在同一个基本URL下混合这两种样式。例如,如果您有一个REST端点,用于检索id = 1234的用户帐户的详细信息:

/users/id/1234

并且您希望实施"验证电子邮件"工作流(为了论证而不是作为REST服务实现),然后为您的验证电子邮件工作流/服务选择一个不与REST样式/用户/ API冲突的URL。不要试图做这样的事情:

/users/id/1234/verifyEmail?securityToken=XXXX

但是,更喜欢为此端点创建一个全新的URL:

/verifyEmail/userId/1234?securityToken=XXX

这些指南在很大程度上是随意的:重要的是以一种对其他程序员有意义的方式设计您的服务,因为这些人将使用您的服务。与任何其他软件设计一样,Single Responsibility Principal将为您提供很长的路要走。每个基本URL应该只做一件事!

答案 1 :(得分:0)

  

如引言中所述,H ypermedia为E   应用程序的约束(HATEOAS)约束是其中之一   最不了解的约束,因此很少实现   正确。对许多服务声称的事实感到恼火   无论是否违反超媒体,都要成为RESTful   约束,菲尔丁[29]明确表示超媒体是   一个基本要求,但因为术语REST是如此广泛   滥用,社区中有很多人在寻找   替代术语,如超媒体API,真正表示   RESTful服务

REST架构具有明确定义的约束,您可以在此处找到:http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

就我所知,术语RESTful来自理查森成熟度模型。 http://martinfowler.com/articles/richardsonMaturityModel.html我不知道原始文章的位置,但据我所知这是一些废话,像你这样的东西应该调用每个API REST,它至少满足一个约束,你应该只调用RESTful满足每个REST约束的API。 Fielding多次明确表示,只有满足所有约束条件的API才被视为REST和API,它们不是简单的Web API,而是REST API。遗憾的是,REST和RESTful单词都被那些对REST一无所知的开发人员过度使用。他们中的大多数人甚至不知道存在REST约束。对于他们来说,REST只是CRUD和URI设计。只需查看有关REST的SO问题,99%就是那种东西。当我回答与REST相关的问题时,我会从他们那里得到减分点更有趣......所以为了避免混淆和误解我们现在构建超媒体API,所以只要人们不开始使用这个词,我们就可以生活在一块...

从大多数问题来看,我无法理解。我在这里比较了REST和SOAP以及许多人Representational state transfer (REST) and Simple Object Access Protocol (SOAP),也许你找到了问题的答案。

  

如何不 - REST部分应该相互通信并与REST通信   份?

如果你的意思是microservices app部分,那么ofc。 SOA和REST微服务只需通过向彼此发送HTTP和SOAP消息即可彼此通信。如果您没有遗留SOAP系统,那么我建议只开发REST服务,因为SOAP是有状态的,因此它不像REST那样扩展。