最近发现,对于刚刚接触HTTP服务的同学,在一些基础概念上容易混乱。很多同学搞不清楚Web Service,SOAP,REST以及OData这些技术之间的关系与区别。
文本会尽量用最简洁的方式,解释这几个概念,并附上一些资料的链接,供有需要的同学进一步阅读。
1. 关系说明
首先,开宗明义,让我们先明白这几者的关系:
Web Service:一种跨编程语言、跨操作系统平台的远程调用技术。这个很好理解,Web Service主要可以实现不同系统之间的通信。如果以SAP系统为例,通过Web Service可以实现两个不同的SAP系统之间,或SAP系统与其它第三方系统(例如,可以是.Net或Java平台的应用)间进行通信。
Web Service有两种实现方式,一种是SOAP协议方式,一种是REST方式。
REST是一组架构约束条件和原则,描述了一种如何访问/使用HTTP服务的方式。(如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。)
OData是REST设计风格的一种实现,OData和其他Restful风格的Web service在于,OData提供了了描述数据和数据模型的一个统一的方式。所以说,OData并非是一种新的通信技术,OData也属于Web Service。
2. 概念辨析
2.1 SOAP方式的Web Service
目前而言,SOAP是一套Web Service(WS)的比较完整的实现方案。
在以SOAP方式实现的Web Service中,SOAP协议和WSDL构成了Web服务的结构单元。
SOAP也即“简单对象访问协议(Simple Object Access Protocol)”,我们知道Web Service通过HTTP协议发送和接收数据,SOAP协议中增加了一些特定的HTTP消息头,来说明HTTP消息的内容格式。客户端按照SOAP的格式便可以通过Web Service调用位于远程系统上的服务。
WSDL也即“Web服务描述语言(Web Services Description Language)”,客户端可以通过WSDL了解这个Web Service所提供的功能,描述了Web Service中提供的函数、函数的输入参数和返回值。
简而言之,在SOAP方式实现的Web Service中,SOAP描述了“访问方式”,通过WSDL描述了“服务内容”,SOAP方式的Web Service是WS的一套完整的实现方案。
2.2 SAP系统中的SOAP方式Web Service
在SAP系统中,开发和消费SOAP方式的Web Service十分方便。
在SAP Netweaver平台上通过UDDI工具,可以将SAP已有的功能(例如RFC, BAPI等)直接封装成web service对象,供其他系统调用,或者通过实现类调用其他系统的web service,进而轻松实现SAP与其它系统的集成。
完成这一Web Service封装和消费,在SAP系统中主要通过T-code 'SOAMANAGER' 完成,对于ABAP开发人员而言,并不需要了解Web Service的封装细节,只要学会如何“发布”和“消费”web service即可。
2.3 REST方式的Web Service - OData
REST也即“表述性状态转移(Representational State Transfer)”,REST是一种HTTP服务的设计风格,描述了一套如何设计和访问HTTP服务的原则。
因此,相较于SOAP,REST并非是一个协议,仅是一种设计风格,并没有强制的约束力。
不同的设计者可以依据自己的实际项目和需求,设计REST风格的Web Service,也正是由于这种“各自为战”的Web Service实现方式,让REST方式的web service在性能和可用性上通常会优于依据SOAP发布的web service, 但由于在细节上没有太多约束,其统一性上不及SOAP。
OData是REST设计风格的一种实现,OData和其他Restful风格的Web service在于,OData提供了了描述数据和数据模型的一个统一的方式。
因此,在一定程度上讲,OData方式的web service很好地解决了RESTful形式的Web Service在统一性上所面临的问题。
2.4 SAP系统中的OData
在SAP系统中,通过Gateway统一管理SAP 系统中的OData服务。
SAP Gateway是SAP Netweaver平台上的一个组件,用于集中管理OData相关的功能,实现SAP系统与外部设备、平台、应用的集成。我们可以通过SAP Gateway来创建并发布相应的OData服务。
在SAP系统中,创建OData服务的事务代码为SEGW。
通过SEGW,我们可将SAP系统内的数据库表、RFC等以OData的形式发布出去,供Web App使用。
因此,类似于SOAP形式的web service, 对于ABAP开发人员而言,并不需要了解Odata的封装细节,学会使用SEGW这个工具即可。此外,在SAP Fiori开发过程中,除了从backend发布OData服务,开发人员也可以直接将CDS发布OData服务。
3. 小结
SOAP和REST是Web Service实现的两种方式,各具特点,没有“那种形式的好,那种形式的不好”这一说。选取那种方式的Web Service主要取决于具体的场景和需求。只要能清晰、高效地解决问题的方案就是好方案。
目前在SAP系统中,SOAP形式的Web Service更多应用于系统间的集成,OData则广泛应用于Fiori应用程序开发中。
最后,分享一些链接,感兴趣的同学可通过以下链接获取阅读相关的资料。
1. RESTful架构详解:https://www.runoob.com/w3cnote/restful-architecture.html
2 Web service概念(SOAP): https://www.cnblogs.com/xdp-gacl/p/4048937.html
3. SAP Gateway与OData用法简介:https://blog.csdn.net/nkGavinGuo/article/details/90295406
4. SAP Web Service简介与配置方法:https://www.cnblogs.com/zohoo/p/7295920.html
5. OData在线帮助文档:https://www.odata.org/documentation/odata-version-3-0/odata-version-3-0-core-protocol/#overview