当前位置: 首页 > 知识库问答 >
问题:

SOAP和REST WebServices之间的区别是什么?肥皂能RESTful吗?

蒋俊
2023-03-14

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

当使用HTTP向RESTfulendpoint请求数据时,使用的HTTP谓词是GET。

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

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

共有1个答案

阎宾实
2023-03-14

我发布这个作为答案,因为评论只是不够。以下是我想为大家总结的内容。

首先,我们将从这两个引用开始:

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

RESTful服务倾向于将HTTP动词(或动作)与名词(或实体/对象)相关联一般说来,多元性和奇异性更多地暗示了行动。即。get rootendpoint/employeese将返回所有员工(或至少一个符合特定条件的大组)而get rootendpoint/employee/12只能返回一个雇员。(通常是ID为12的雇员。)

RESTful服务在HTTP谓词(getpostputdelete)和操作之间建立了直接的关联。这就是两者之间联系的目的:没有什么特别的东西需要添加到消息正文中来指示用户打算做什么。(我将继续强调这一点。)

REST完全是为HTTP设计的。它很擅长它的工作。

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. |
+---------------------------------------------------+

在该APIendpoint中,您指定要查找user_id{user_id}users对象和playlist_id{playlist_id}playlists对象(在该users对象中)。

一些RESTful服务允许参数上的组合标志。

以堆栈交换API为例。您可以通过用分号分隔多个问题或答案来获取它们,它基本上只过滤到这些问题或答案。

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

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

此方法接受的排序操作于answer对象的以下字段:

输入SOAP(Simple Object Access Protocol),它是REST的前身。SOAP通过来回发送消息解决了这个问题。它们使用XML(尽管您可以在没有它的情况下构建一个基于SOAP的服务,类似于在没有JSON的情况下构建一个RESTful服务)来交换消息,这样服务器就没有要做什么的初始指示。

基于SOAP的服务以一种与传输介质无关的方式解决了这个问题。服务器和客户端根本不需要使用HTTP,甚至不需要使用TCP。他们只需要使用相同或兼容的传输介质。事实上,您可以将现代企业环境视为基于SOAP的服务。当你需要获得新的供应品时,你向你的办公室经理提交一份申请,然后他会给你一条信息。在收到初始申请时,经理不知道是否允许。他们必须阅读申请的其余部分,以确定这是一个有效的请求还是无效的请求。

SOAP是围绕RPCS(远程过程调用)设计的,许多防火墙会阻止这些调用。因此,SOAP被修改为在HTTP上工作。它的设计是为了集成大量不同的技术。

获取世界上所有主要城市的天气报告。

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

+---------------------------------------------------+
| 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>

这两种协议各有优缺点,您应该根据问题的需求选择您正在使用的协议。指导你如何实现这一点超出了本问题和答案的范围。也就是说,有三件事需要考虑:了解您的项目,了解您的需求,最重要的是,为您的观众正确地记录它。

 类似资料:
  • 问题内容: 我是Java新手,我知道Web服务有两种类型 SOAP Web服务。 RESTful Web服务。 谁能告诉我两者的基本区别是什么?在什么情况下创建?在什么情况下创建? 谢谢, 问题答案: 正如第一个答案已经解释的那样,SOAP Webservices和REST Webservices在各个方面有所不同。 肥皂: 您可以在.wsdl文件中定义您的界面,该文件准确描述了预期的输入参数以及

  • 在Java 7之前,JVM内存中有一个名为PermGen的区域,JVM以前在这里保存它的类。在Java 8中,它被移除并被称为元空间的区域所取代。 PermGen和Metaspace之间最重要的区别是什么? 我知道的唯一区别是,并且忽略了VM参数。

  • 和之间有什么区别? 是什么原因导致他们被扔?如何解决这些问题? 在修改现有代码以包含新的jar文件时,我经常会遇到这些可抛物。我在通过WebStart发布的一个Java应用程序的客户端和服务器端都碰到了它们。 我遇到的可能原因是: 代码客户端的中未包含的包 我们正在使用的新JAR缺少运行时类路径 版本与以前的JAR冲突 当我今天遇到这些问题时,我会采取跟踪和错误的方法来使事情正常工作。我需要更多的

  • 当我试图在Spring4.x上进行测试时,我使用了MockMvc web客户端,但我正在阅读和尝试Spring5.x的新特性。 我认为,WebTestClient和MockMvc是相同或非常相似的。 MockMvc和WebTestClient之间的区别是什么?

  • 有人能给我解释一下map和flatMap之间的区别,以及什么是各自的好用例吗? “结果扁平化”是什么意思?它有什么好处?

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型