一、前言

昨天为止,政府的一个公共部门的项目顺利结束,就系统间消息传输这个点,知识点总结一下。本文主要参考octoperf的文章,链接见文末参考资料。

系统中用到的是SOAP协议进行传输数据,有人会立马会问为什么不用Rest,它更快,更简单。可能会说一大堆东西来反驳这个继续选型。技术,没有好坏,在限定的条件下,合适的就是对的,满足需求的就是好的。下面,进入正文。

二、Rest vs Soap

Rest 是一种构造风格,而Soap是一种传输协议。它们不是同样的东西,因此不能直接进行比较,接下来用一个表格,就某些点来进行比较。

sdfdsf SOAP Rest
当API变化时 客户端代码必须用新的WSDL进行在编译 后台可兼容
同步/异步 异步消息 同步
带宽的使用
可缓存否 不可以 可以
数据格式 只有XML XML,JSON,纯文本等
错误处理  内置错误处理机制 没有
暴露业务逻辑方式 服务接口 URIs
失败处理 内置再尝试机制 期待客户端进行再尝试
可靠性 可靠 不可靠。HTTP delete 即使失败,也会返回OK
安全性 支持SSL和WS-Security 依赖服务设计者提供的文档
需要的工具 需要中间件的支持 只需要支持HTTP即可
哪些领域使用 金融,支付网关,通信 社交媒体,Web,手机

2.1 SOAP

SOAP是被Web Services使用的标准的消息协议,主要目标是用于内部的Application的信息传递(SOAP = XML + 通信协议(如HTTP、FTP等))。WSDL(Web Services Description Language)就是描述Web Services的资料。描述了Services的接口,利用相关的工具,可以通过WSDL生成任何语言的、调用services的代码。大多数API测试工具,支持SOAP可以自动测试代码。

2.2 REST

Representational State Transfe

它通过网络暴露出公共API,来对数据进行CRUD操作。

发送请求的例子:

GET /articles?include=author HTTP/1 

Json返回响应:

HTTP/1.1 200 OK
Content-Type: application/vnd.api+json {
"data": [{
"type": "articles",
"id": "1",
"attributes": {
"title": "JSON API paints my bikeshed!",
"body": "The shortest article. Ever.",
},
"relationships": {
"author": {
"data": {"id": "42", "type": "people"}
}
}
}],
"included": [
{
"type": "people",
"id": "42",
"attributes": {
"name": "John",
"age": 80,
"gender": "male"
}
}
]
}

REST多数情况下依赖于软件架构中无状态网络协议,如HTTP协议。

2.3 比较

二者都有各自的优势,没必要比较哪个好坏,在特定的环境下,合适的才是最好的。鞋子舒不舒服只有脚知道。

2.3.1 Rest优势

· HTTP 通信

· REST易于扩展

· 大量开发者的社区

· 轻便

· 对JavaScript友好

· 可使用XML,Json或其他格式的数据

2.3.2 SOAP优势

·适用于大型企业项目:因为它有许多特性,如XML加密,失败自动重试等。

· 安全性高

·通过标准的WSDL文档定义Services

·适用于有状态的传输交流

·支持多种传输协议如HTTP,FTP,SMTP,纯sockets等。

2.4 使用场景

场景 SOAP REST 理由
公共层面接口   Good 简单就是最大的理由
高吞吐量的接口   Good 性能好,占用带宽少
支付系统 Good   安全性好
手机应用   Good 目前,使用Json的Rest已成为标准

三、结束语

最合适的才是最好的。不需要做无谓的争论。

参考资料:

https://octoperf.com/blog/2018/03/26/soap-vs-rest/

Rest vs Soap 比较的更多相关文章

  1. 【接口开发】浅谈 SOAP Webserver 与 Restful Webserver 区别

    接口,强大,简单,交互,跨越平台 下面简单阐述这两大接口思想 一 REST: REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性. ...

  2. salesforce 零基础学习(五十五)java通过SOAP方式定时访问某个文件然后插入到sObject中

    项目源码:https://github.com/zhangyueqidlmu/SOAP-Access-SFDC.git 项目背景:salesforce端相关数据需要其他系统提供,其他系统可以提供相关数 ...

  3. infopath发布的提示“无法解析SOAP消息”(The SOAP message cannot be parsed)问题解决方案

    最近发现一个列表数据过大,每次发布infopath表单提示如下错误: 后来发现一个infopath表单通过list.asmx and Formsservice.asmx来进行发布的. This err ...

  4. Rest webservice 和SOAP webservice

    SOAP: 简单对象访问协议(Simple Object Access Protocol,SOAP)是一种基于 XML 的协议,可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP) ...

  5. webservice客户端添加soap Header信息

    根据wsdl文件的header信息,在客户端中添加相应的header 1.wsdl信息如图 <soapenv:Envelope xmlns:soapenv="http://schema ...

  6. 推荐一篇 关于REST 和 SOAP区别的文章

    写的很出色! https://www.ibm.com/developerworks/cn/webservices/0907_rest_soap/ 我的感觉就是REST针对的是资源,通过api的URL就 ...

  7. c/c++的Soap应用

    1. 关于soap 在许多项目中团队中,我们常常会听到这样的话:我们这里是用webservice交互的.而说话的场景往往就是交互对象双方比较异构,所谓异构.即双方是不同的开发语言.不同的运行环境等.比 ...

  8. C# 通过模拟http请求来调用soap、wsdl

    C#调用webservice的方法很多,我说的这种通过http请求模拟来调用的方式是为了解决C#调用java的远程API出现各种不兼容问题. 由于远程API不在我们的控制下,我们只能修改本地的调用代码 ...

  9. 彻底理解webservice SOAP WSDL

    WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...

  10. WCF服务创建与抛出强类型SOAP Fault

    原创地址:http://www.cnblogs.com/jfzhu/p/4060666.html 转载请注明出处 前面的文章<WCF服务的异常消息>中介绍过,如果WCF Service发生 ...

随机推荐

  1. NO.A.0004——Git私有服务器部署/makefile方式/本地与Git服务器代码交换

    一.在linux服务器上搭建私有Git服务程序:make编译方式 远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改.GitHub就是一个免费托管开源代码的远程仓库.但是对于某 ...

  2. 如何将IDM中的进程设置进行备份

    有时候我们想用浏览器自带的下载管理器进行下载,但是一点下载却被IDM(Internet Download Manager)自动嗅探捕获并下载,还有人因为重装系统使得之前更改IDM的设置都失效,只得重新 ...

  3. FL Studio中的文件设置介绍

    在fl中,我们想要找到文件设置选项,可以在主菜单中选择选项-文件设置来打开,也可以通过按"F10"快捷键来一步打开." 文件设置"页面可以将其他文件夹链接到浏览 ...

  4. 【GIT】命令笔记

    1.将本地代码提交到github等仓库 1.创建仓库省略 2.切换到本地需要上传的地址 :初始化仓库 git init 3.配置git,告诉git你是谁 git config --global use ...

  5. Vim注释行的方法

    目录 一.Visual block 加注释 去注释 二.正则表达式 加注释 去注释 一.Visual block 加注释 1.首先按键盘上的ESC进入命令行模式 2.再按Ctrl+V进入VISUAL ...

  6. 这可能是项目中最实用的java8示例了,还不来看?

    ​一.组成及特点 数据源.中间操作.终端操作 流只能使用一次 并行流 和 串行流 二.可以产生流的数据源 集合.文件 三.中间操作 字符串操作拼接joining(""),底层实现是 ...

  7. Javascript 严格模式的一些理解

    平常我们在ECMAscript5中可以声明以下的变量 num = 5; console.log(num);//输出的是变量5 而为了Javascript更合理.更安全.更严谨的方向发展,添加了一种新的 ...

  8. mysql-查询不同列的数量合计

    车辆违规信息表testmodel_test 表结构: 表字段:cra_id(车牌号),if_weigui(该次行驶是否违规,0是正常,1是违规) 目的: 查询表中共有几辆车,违规的有几辆车: 方法1 ...

  9. 【CF983C】elevator——记忆化搜索

    (题面来自luogu) 题意翻译 题意 一个9层的楼有一个可以容纳4个人的电梯,你要管理这个电梯. 现在各层楼上有一些在排队的人,你知道他们在哪层要到哪层去.你也知道到电梯门口的顺序.根据公司的规定, ...

  10. Java蓝桥杯练习——杨辉三角形

    问题描述: 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数. 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加. 下面给出了杨辉三角形的前4行: 1 1 1 ...