SOAP和REST Web服务之间有什么区别?SOAP可以是RESTful吗?

用户名

从MSDN杂志https://msdn.microsoft.com/en-us/magazine/dd315413.aspxhttps://msdn.microsoft.com/en-us/magazine/dd942839.aspx我了解

当使用HTTP请求RESTful终结点提供数据时,使用的HTTP动词为GET。

使用REST意味着您可以利用HTTP缓存和其他功能(如条件GET)来帮助扩展服务。其中许多技术无法与SOAP一起使用,因为SOAP仅通过HTTP使用POST。

从Wikipedia页面http://en.wikipedia.org/wiki/Representational_state_transfer

RESTful系统通常但并非总是通过超文本传输​​协议与网络浏览器用来检索网页并将数据发送到远程服务器的HTTP动词(GET,POST,PUT,DELETE等)进行通信。[

但是使用HTTP POST从资源获取数据是否违反REST体系结构换句话说,基于SOAP的Web服务是否可以是RESTful?

RESTful和基于SOAP的Web服务之间还有其他区别吗?

专员

介绍

我将其发布为答案,因为评论还不够。这是我想为您总结的。

首先,我们将从以下两个参考开始:

http://spf13.com/post/soap-vs-rest

http://blog.smartbear.com/apis/understanding-soap-and-rest-basics/

最后,我想通过说以下内容来开始这篇文章:

SOAPREST都旨在解决以下问题:两个不同的应用程序,程序或设备如何以一种可扩展且易于理解的方式相互交换和共享数据?


RESTful服务

按照设计 的RESTful表象小号大老牛逼转让(BOT))服务使用HTTPHTTP动词(GETPOSTPUTDELETE)来表示的意图。这些动词非常清楚地向用户指示使用它们时会发生什么。服务器可以使用它们做出先发制人的决定。也就是说,它可以准备好采取行动之前就做出决定

考虑到这一点,您必须从用户插入服务帐户访问少量数据一个GET endpoint/users/account/id请求或一个POST endpoint/users/account包含主体的请求中哪个更简单id根据REST的定义,该POST请求违反了REST所暗示的基本协议即:服务器应该在数据到达之前知道用户的意图。这是REST试图保证的基本基础

这个事实(从根本上来说)不要求允许RESTful通信指示客户端开始发送数据之前客户端的意图。这允许服务器在消息到达之前很长时间接受和拒绝消息,从而减少了处理负载。

REST的另一个方面(尤其是与TwitterFacebookGoogle API结合使用):RESTful服务的重点和任务在于HTTP,可以利用HTTP响应头。也就是说,HTTP 403 Forbidden如果不允许客户端访问,他们可能会以一条消息作为响应基于SOAP的服务可能不会。结果消息必须表明这样的结果。

RESTful服务倾向于将HTTP verbs(或动作)与名词(或实体/对象)相关联。一般而言,复数和单数表示更多关于动作的信息。GET RootEndpoint/Employees,期望返回所有雇员(或至少一个符合特定条件的大集团。)而GET RootEndpoint/Employee/12期望返回一名雇员。(通常是ID为12的员工。)

基于REST的服务做一个直接的关联之间HTTP verbGETPOSTPUTDELETE)和行动。这是两者之间联系的目的:没有什么特别的需要添加到消息正文中以指示用户打算做什么的消息(我将继续强调这一点。)

REST是专为HTTP这是非常擅长的工作。

RESTful过滤

一般而言,要过滤REST服务请求,您将包括多个URL段,每个段都指示跟随其后的参数。

我将以Spotify API为例https://developer.spotify.com/web-api/get-playlist/

取得播放清单

获取Spotify用户拥有的播放列表。

终点

GET https://api.spotify.com/v1/users/{user_id}/playlists/{playlist_id}

请求参数

+---------------------------------------------------+
| Path parameter | Value                            |
+---------------------------------------------------+
| user_id        | The user's Spotify user ID.      |
| playlist_id    | The Spotify ID for the playlist. |
+---------------------------------------------------+

在这种API端点,您可以指定你正在寻找一个users有对象user_id{user_id},以及playlists对象(即内users与对象)playlist_id{playlist_id}

某些RESTful服务允许在参数上使用组合标志。

以Stack Exchange API为例。您可以使用分号将多个问题或答案分开,这样基本上可以过滤出这些问题或答案。

如果我们分析此端点(/ questions / {ids} / answers),您将看到它指定:

获取ID中标识的一组问题的答案。

如果您有一组有趣的问题,并且希望一次获得所有答案,或者要轮询新答案或更新答案(与sort = activity结合使用),则此方法最有用。

{ids}最多可以包含100个以分号分隔的ID,以便以编程方式查找question_id问题对象上的ID

此方法接受的排序对答案对象的以下字段进行操作:

这也是API的一个很好的例子,它允许其他GET请求进一步过滤/排序结果。

用法示例: https://api.stackexchange.com/2.2/questions/30581530/answers?order=desc&sort=activity&site=stackoverflow

现在,如果对/ answers / {ids}端点执行相同的操作,则可以提出以下类似的建议:https://api.stackexchange.com/2.2/answers/30582379;30581997;30581789;30581628?order=desc&sort=activity&site=stackoverflow这为我们拉出了四个指定的答案。

例如,我们甚至可以与SE API结合使用,并包含过滤器以限制返回的字段:https://api.stackexchange.com/2.2/questions/30581530/answers?order=desc&sort=activity&site=stackoverflow&filter=!)V)P2Uyugvm(有关filter参数的说明,请参见/2.2/filters的链接。)


基于SOAP的服务

输入SOAPš imple ö bjectCCESS P rotocol),这是前身RESTSOAP通过来回发送消息解决了这个问题。他们使用XML(尽管您可以不使用SOAP来构建基于SOAP的服务,就像不使用即可构建RESTful服务一样JSON)来交换消息,从而使服务器无法初步指示要做什么。

基于SOAP的服务以与传输介质无关的方式解决了此问题。服务器和客户端不需要使用HTTP,甚至根本不需要TCP他们只需要使用相同或兼容的传输介质。实际上,您可以将现代公司环境视为基于SOAP的服务。当您需要新的耗材时,您可以向办公室经理提出请购单,然后由他来回答。收到初始申请后,您的经理不知道是否允许。他们必须阅读其余申请,以确定该请求是有效请求还是无效请求。

SOAP是围绕RPCs(远程过程调用)而设计的,许多防火墙阻止了它们。因此,结果,SOAP被修改为可以工作HTTP它旨在集成多种不同的技术。

因为SOAP是围绕信息设计的,它是一个详细的服务更多。通常,SOAP服务中表示复合动作比较容易也就是说,如果您基于许多标准(而不只是一个标准)进行请求,则SOAP往往具有更好的接口。objects

基于SOAP的过滤

基于SOAP的服务使用RPC中的其他字段进行过滤。这些字段的组合方式取决于提供商。

我将从全球天气API中获取一个示例:http : //www.webservicex.net/globalweather.asmx ? op= GetWeather

获取天气

获取全球所有主要城市的天气报告。

测试

要使用HTTP POST协议测试操作,请点击“调用”按钮。

+---------------------------------------------------+
| Parameter      | Value                            |
+---------------------------------------------------+
| CityName:      |                                  |
| CountryName:   |                                  |
+---------------------------------------------------+

例如,如果指定“ Blanding”和“ United States”,您将看到生成的XML如下所示:

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <GetWeather xmlns="http://www.webserviceX.NET">
      <CityName>Blanding</CityName>
      <CountryName>United States</CountryName>
    </GetWeather>
  </soap12:Body>
</soap12:Envelope>

这将作为对的基于POST的调用提交(用于HTTP SOAP请求)http://www.webservicex.net/globalweather.asmx/GetWeather


回到原始问题:

基于SOAP的Web服务可以是RESTful的吗?

这是您最初提出的问题,根据我提供的信息,我相信它有理由认为它不能。这两项服务是互斥的。 REST旨在通过交换headers指示意图和message bodies指示目的来解决该问题SOAP打算通过交换messages表示意图和目的来解决该问题

使用HTTP POST从资源中获取数据是否违反REST体系结构?是的。REST风格的服务架构的设计使用术语POST来表示一个特定的动作。每个HTTP verbREST代表什么行动做打算。

正如我在对最初问题的评论中所说:

您可以HTTP POST用来获取数据,但是它不是RESTful服务,因为HTTP verb毫无意义。RESTful服务是RESTful的,因为动词表示操作


我该选择什么,SOAP还是REST?

这部分内容主要供将来的读者使用。

两种协议都有优点和缺点,您应该根据问题的要求选择使用哪种协议。指导您如何完成此任务超出了本问答的范围。就是说,要考虑三件事:了解您的项目了解您的需求,并且最重要的是,为您的听众正确地记录它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PayPal REST API和经典NVP / SOAP API之间有什么区别?

来自分类Dev

SOAP URL和REST URL之间的区别

来自分类Dev

SOAP URL和REST URL之间的区别

来自分类Dev

spring-ws,CXF,soap(camel component)调用Web服务之间有什么区别?

来自分类Dev

spring-ws,CXF,soap(camel component)调用Web服务之间有什么区别?

来自分类Dev

SOAP和ASMX有什么区别

来自分类Dev

RESTful服务客户端可以是SOAP服务的服务器吗?

来自分类Dev

RESTful服务客户端可以是SOAP服务的服务器吗?

来自分类Dev

具有SOAP和REST实现的SOA

来自分类Dev

具有SOAP和REST实现的SOA

来自分类Dev

如何减少Web服务(SOAP和REST)的内存占用量?

来自分类Dev

Spring Boot-REST和SOAP组合

来自分类Dev

$ @和“ $ @”之间有什么区别吗?

来自分类Dev

SOAP Web服务和OData服务之间的具体区别是什么?

来自分类Dev

Web服务器和开发服务器之间有什么区别?

来自分类Dev

RESTful API和SOAP服务

来自分类常见问题

JBoss EAP,Wildfly,JBoss Web和JBoss服务器之间有什么区别?

来自分类Dev

Web服务生产者和消费者之间有什么区别?

来自分类Dev

Azure云服务分段槽和Azure Web应用分段槽之间有什么区别?

来自分类Dev

Web服务和企业消息系统之间有什么区别?

来自分类Dev

这些Web服务器在Seaside:Zinc,Kom和Swazoo之间有什么区别?

来自分类Dev

Web服务生产者和消费者之间有什么区别?

来自分类Dev

Azure云服务登台插槽和Azure Web App登台插槽之间有什么区别?

来自分类Dev

sendmail是smtp服务器吗?MTA和邮件服务器之间有什么区别吗?

来自分类Dev

'document.getElementById()'和'document.getElementById'之间有什么区别,圆括号可以有区别吗?

来自分类Dev

非CRUD和无状态环境中的SOAP vs REST

来自分类Dev

移动数据和云服务之间有什么区别?

来自分类Dev

在Autofac中:服务和组件之间有什么区别?

来自分类Dev

GCP服务和GCP资源之间有什么区别?

Related 相关文章

  1. 1

    PayPal REST API和经典NVP / SOAP API之间有什么区别?

  2. 2

    SOAP URL和REST URL之间的区别

  3. 3

    SOAP URL和REST URL之间的区别

  4. 4

    spring-ws,CXF,soap(camel component)调用Web服务之间有什么区别?

  5. 5

    spring-ws,CXF,soap(camel component)调用Web服务之间有什么区别?

  6. 6

    SOAP和ASMX有什么区别

  7. 7

    RESTful服务客户端可以是SOAP服务的服务器吗?

  8. 8

    RESTful服务客户端可以是SOAP服务的服务器吗?

  9. 9

    具有SOAP和REST实现的SOA

  10. 10

    具有SOAP和REST实现的SOA

  11. 11

    如何减少Web服务(SOAP和REST)的内存占用量?

  12. 12

    Spring Boot-REST和SOAP组合

  13. 13

    $ @和“ $ @”之间有什么区别吗?

  14. 14

    SOAP Web服务和OData服务之间的具体区别是什么?

  15. 15

    Web服务器和开发服务器之间有什么区别?

  16. 16

    RESTful API和SOAP服务

  17. 17

    JBoss EAP,Wildfly,JBoss Web和JBoss服务器之间有什么区别?

  18. 18

    Web服务生产者和消费者之间有什么区别?

  19. 19

    Azure云服务分段槽和Azure Web应用分段槽之间有什么区别?

  20. 20

    Web服务和企业消息系统之间有什么区别?

  21. 21

    这些Web服务器在Seaside:Zinc,Kom和Swazoo之间有什么区别?

  22. 22

    Web服务生产者和消费者之间有什么区别?

  23. 23

    Azure云服务登台插槽和Azure Web App登台插槽之间有什么区别?

  24. 24

    sendmail是smtp服务器吗?MTA和邮件服务器之间有什么区别吗?

  25. 25

    'document.getElementById()'和'document.getElementById'之间有什么区别,圆括号可以有区别吗?

  26. 26

    非CRUD和无状态环境中的SOAP vs REST

  27. 27

    移动数据和云服务之间有什么区别?

  28. 28

    在Autofac中:服务和组件之间有什么区别?

  29. 29

    GCP服务和GCP资源之间有什么区别?

热门标签

归档