Web API与SOAP API的区别?
本文Web API即REST API。SOAP API起源于局域网服务集成时期,伴随SOA概念发展起来;REST API起源于互联网SAAS服务。下面将从成熟度、协议机制、安全机制、传输机制、应用场景等几个维度进行比较。
Web API(REST API) | SOAP API | |
报文 格式 | JSON | XML |
描述 语言 | Open API规范 (中文版),非强制 | WSDL规范,强制 |
优点 | 1. 是一种架构风格。 2. 可读性比较好:可以把URL的名字取得有实际意义。 3. 高性能。 4. 由API网关提供的安全机制,开源方案、商业方案都非常成熟。 | 1. 定义严格,是一种标准 2. 事务性支持 。 3. 开发工具支持比较多。 4. 自带安全协议,不依赖三方应用。 |
缺点 | 1.事务性支持弱。 | 1. 性能差。 |
结论 | 1.更适合互联网API服务货币化 2.轻量级企业集成。 | 1. 更适合企业内部集成、复杂业务场景。 |
1.成熟度
两者的根本区别:SOAP 是一种协议,而 REST 是一种架构风格。
SOAP 是一项标准协议,其最初的设计意图是让使用不同语言且在不同平台上构建的应用之间进行通信。由于 SOAP 是一项协议,因此它会施加一些内置规则,从而增加复杂性和开销,并可导致页面加载时间延长。但是,这些标准还提供了内置合规性,包括安全性、原子性、一致性、隔离性和持久性(ACID),此外,支持厂商比较多,使其更适合企业内部的应用集成、数据集成。
REST是一种架构风格,正如 Roy Fielding 在论文“[Architectural Styles and the Design of Network-based Software Architectures](https://ics.uci.edu/~fielding/pubs/dissertation/top.htm)”(架构模式以及基于网络的软件架构的设计)中定义的那样,只要 API 符合 RESTful 系统的 6 个导向性约束,就算作 RESTful API。虽然看似有很多约束需要遵循,但是这些约束遵循起来要比遵循规定的协议容易得多。因此,在互联网API领域,RESTful API 现在变得比 SOAP 更为普及。
2.请求报文协议不同
Web API的消息规格为URL请求;SOAP API的消息格式为SOAP规范。从消息封装、编码/解码上,Web API有明显的并发性能优势。
由于SOAP消息格式在发布时声明,可以方便一些高级工具调用方实现可视化的参数映射、配置化的调用。
例如,一个Web API请求消息
https://b2b.awspaas.com/openapi
?timestamp=1439277618461
&sig_method=HmacMD5
&cmd=app.install.check
&appId=com.actionsoft.apps.notification
&access_key=Salesforce#1
&format=json
&sig=DE90336BEDB0C3D3FE6DEE2FF0DF11AC
例如,一个SOAP API请求消息
<soap:Envelope xmlns:ser="http://service.sdk.actionsoft.com/"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"/>
<soap:Body>
<ser:isInstalled>
<appId>com.actionsoft.apps.notification</appId>
</ser:isInstalled>
</soap:Body>
</soap:Envelope>
3.响应报文协议不同
Web API可以返回JSON/XML结果,尤其是JSON数据格式是当今Web和移动端开发的首选规范;SOAP API返回一个XML的消息对象。从数据结果封装、编码/解码上,Web API有明显的并发性能优势,同时JSON结构有助于减少网络流量。
由于SOAP响应格式在发布时声明,可以方便一些高级工具调用方实现可视化的结果映射、配置化的调用。
例如,一个Web API响应消息
{
"data" : true,
"result" : "ok"
}
例如,一个SOAP API响应消息
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:isInstalledResponse
xmlns:ns1="http://service.sdk.actionsoft.com/">
<return
xmlns:ns2="http://service.sdk.actionsoft.com/">
<data>true</data>
</return>
</ns1:isInstalledResponse>
</soap:Body>
</soap:Envelope>
4.安全机制不同
- Web API(REST API)可以基于HTTPS,而SOAP API可以基于WS-Security规范对消息加密时也可以使用HTTPS
- Web API(REST API)的认证基于访问凭证 ( access_key )和私钥 ( secret )的签名摘要验证,而SOAP API的认证基于WS-Security规范的用户名密码或者x509
5.客户端调用方式不同
SOAP API需要一个比较重的SOAP协议栈,会遇到跨语言、版本的SOAP互操作问题;Web API仅需要客户端支持HTTP(s)传输协议。
6.并发处理能力的不同
测试环境
项 | 说明 |
---|---|
AWS PaaS服务器 | 16核、16G内存、Centos 7.1 64 位、AWS PaaS(6.1.2.0830) |
数据库服务器 | 16核、16G内存、Centos 7.1 64 位、 Oracle11.2g 64位 |
模拟客户机 | 2核、4G内存、Windows 7 32位、 LoadRunner 11 |
测试用例
方法 | 说明 |
---|---|
demo.say | 测试返回简单值 |
demo.calc | 测试返回简单对象 |
测试结果
- Web API最大TPS(Trasaction per second事务数/秒)值为 2137.529
- SOAP API最大TPS(Trasaction per second事务数/秒)值为219.706