如何区分 SOAP 与 REST 请求?

Posted

技术标签:

【中文标题】如何区分 SOAP 与 REST 请求?【英文标题】:How to distinguish SOAP vs REST request? 【发布时间】:2018-03-13 18:48:58 【问题描述】:

假设我有一个 XML,它是对服务的请求。 如何判断它是 RESTful 服务还是 SOAP 服务请求?

仅根据请求内容可以找到哪些可区分的特征?

【问题讨论】:

文件怎么可能是请求?请说明您的问题。可以发一下文件内容吗? 我的意思是 XML 内容。这是假设性问题。 好的。好吧,如果您的“XML 内容”表示作为 POST 发送到服务的 SOAP 请求,我会说它是 SOAP。如果 XML 是内容或负载本身(没有在服务器端进行解释),则取决于您将其发送到的 URL 类型。如果 URL 标识了一个资源,那么它很可能是一个 REST 请求。 XML 是否基于 WSDL?如果是这样,您就可以非常确定地处理 SOAP 服务。如果您不知道,您可以查看 XML 的 structure。如果它包含一个 SOAP 信封和正文,可能还有一个标头,那么它可能是从 SOAP 服务发出的。如果文档不遵循此结构,则它可能是从普通 HTTP 甚至 REST 服务发出的。请注意,一些伪 REST 服务(实际上是 RPC)也可能返回适合 SOAP 的内容。但是,只要远程服务器理解请求,您为什么还要关心 SOAP vs REST, when to use one and not the other?的可能重复 【参考方案1】:

这是一个 SOAP 请求的示例,这是一个在 http://www.webservicex.net/New/Home/ServiceDetail/56 上调用按国家/地区获取城市 API 的示例:

POST /globalweather.asmx HTTP/1.1
Host: www.webservicex.net
User-Agent: curl/7.45.0
Accept: */*
Content-Type: text/xml
Content-Length: 442

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:tns="http://www.webserviceX.NET">
    <soap:Body>
        <GetCitiesByCountry xmlns="http://www.webserviceX.NET">
            <CountryName>France</CountryName>
        </GetCitiesByCountry>
    </soap:Body>
</soap:Envelope>

您可以看到 XML 正文的区别特征。

对通用服务的 REST 调用可以包含 API 定义的任何 XML 数据。

这可能看起来像:

POST /getaddress HTTP/1.1
Host: localhost:3000
User-Agent: curl/7.45.0
Accept: */*
Content-Length: 85
Content-Type: text/xml

<location>
    <latitude>34.067225</latitude>
    <longitude>-118.474307</longitude>
</location>

【讨论】:

以上是关于如何区分 SOAP 与 REST 请求?的主要内容,如果未能解决你的问题,请参考以下文章

REST/JSON:如何生成示例请求?如何公开 API?

REST 何时/如何取代 SOAP [关闭]

根据接口wsdl怎么生成soap消息请求数据

调用rest服务时,soap服务中的请求格式确定失败

如何区分 Spring Rest Controller 中部分更新的 null 值和未提供的值

http,soap and rest