从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之间还有其他区别吗?
我发布这个作为答案,因为评论只是不够。以下是我想为大家总结的内容。
首先,我们将从这两个引用开始:
http://spf13.com/post/soap-vs-rest
RESTful服务倾向于将HTTP动词
(或动作)与名词(或实体/对象)相关联一般说来,多元性和奇异性更多地暗示了行动。即。get rootendpoint/employeese
将返回所有员工(或至少一个符合特定条件的大组)而get rootendpoint/employee/12
只能返回一个雇员。(通常是ID为12的雇员。)
RESTful服务在HTTP谓词
(get
、post
、put
、delete
)和操作之间建立了直接的关联。这就是两者之间联系的目的:没有什么特别的东西需要添加到消息正文中来指示用户打算做什么。(我将继续强调这一点。)
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调用类型参数节的类型