这是Jerry2020年的第40篇文章,也是汪子熙公众号总共第223篇原创文章。 Jerry之前的文章:从SAPLeonardo到SAPDataIntelligence曾经提到,SAPLeonardoMachineLearningFoundation的机器学习API已经被标注为deprecated状态,将由SAP新的AI产品,SAPDataIntelligence所替代。 在学习SAPDataIntelligence的过程中,Jerry算是了解到了一种新的API开发方式。本文首先简单回顾一下我从事SAP开发工作13年以来,接触过的各种SAPAPI的开发方式,然后再介绍SAPDataIntelligence里遵循LowCodeDevelopment(低代码开发)理念的API开发方式。 文章目录 (1)ABAPfunctionmoduleSOAMANAGER (2)基于事务码SEGW的SAPCRMOData服务手动实现 (3)基于CDSview的OData服务自动生成 (4)SAPCloudforCustomer里基于BusinessObject的自定义ODataAPI创建 (5)基于JavaSpringBoot,NodeExpress等Web应用框架的API开发 (6)Serverless架构 (7)SAPDataIntelligenceGraph 本文提到的API,指的是通过HTTP协议暴露出来,能直接通过浏览器,Postman,curl等各种工具,以及各种编程语言消费的API。在SAP生态圈内,最常遇到的是基于SOAP的WebService和串联SAPS4HANA前后台的OData服务。 (1)ABAPfunctionmoduleSOAMANAGER 最古老的技术,把ABAP系统里的函数通过SOAMANAGER发布成WebService。虽然古老,但至今S4HANA里的Service模块的新功能开发还在使用。 https:blogs。sap。com20140520stepbysteptocreateconsumeandtracewebserviceinabapsystem 我2014年的时候也写过一篇介绍SOAMANAGER使用步骤的文章,虽然到现在为止,这个工具已经更新换代多次了。 (2)基于事务码SEGW的SAPCRMOData服务手动实现 这是我最熟悉的SAPOData服务实现方式,因为我就是SAPCRMOData服务的开发者之一。SAP成都研究院CRM开发团队在2014和2015年开发这些OData服务时,SAPFioriElements的前身,当时的名称是SmartTemplate,还处于发展初期,所以那时候我们没有选择这项基于元数据驱动的开发方式。 Jerry在2018年写过一篇文章SAPOData编程指南,里面详细介绍了这种方法。 (3)基于CDSview的OData服务自动生成 再后来,随着CDSview和FioriElements的成熟,我们可以基于加上了OData。publish注解的CDSview,直接生成OData服务了,具体工作原理在我的这篇文章里有介绍: 揭开SAPFiori编程模型规范里注解的神秘面纱OData。publish工作原理解析 在S4HANA里,除了在ABAPDevelopmentTool里手动给CDSview加上OData。publish注解之外,还可以采取另一种方式,纯粹在浏览器里完成操作。 使用S4HANA里的CustomCDSViews这个应用, 可以选择S4HANA里多个标准的CDSview来创建新的复合视图, 并能根据自己的需求,来挑选哪些标准视图的字段需要包含到新的复合视图里: 最后也是一键实现复合视图的OData服务发布。 到了SAP云平台ABAP环境上,基于CDSview创建的ServiceDefinition和ServiceBinding,把OData服务和FioriUI界面的创建全部包办了。 更多关于这种基于RestfulABAPProgramming模型的开发方式,请参考我的文章30分钟用RestfulABAPProgramming模型开发一个支持增删改查的Fiori应用。 (4)SAPCloudforCustomer里基于BusinessObject的自定义ODataAPI创建 前面在SAPS4HANAFioriLaunchpad里看到的CustomCDSView这个应用,即使不太懂技术的KeyUser,也能在浏览器里完成字段的搭配和OData服务的发布。 SAPCloudforCustomer也有类似的设计,只不过供KeyUser选择的不是CDSview,而是C4C里标准的BusinessObject。 KeyUser在浏览器的CustomODataService应用里能选择将BusinessObject节点里的哪些字段发布到OData服务里,此操作同SAPS4HANA里选择标准CDSview字段的思路是一样的。 在C4C的CloudApplicationStudio里,还能基于标准BusinessObject创建WebService。 总结:基于ABAP技术栈的SAP产品,运行于其上的OData或者WebService这些API,本质都是通过ABAPNetweaver的ICF(InternetCommunicationFramework)被外界消费的。我们观察其调用Url路径,就能找到SICF事务码里的对应的处理节点。 以SAPCRMOData服务Url末尾的CRMOPPORTUNITY为例: 在SICF事务码里能找到对应的同名节点。我们只需要在SICF里给这个节点绑定一个ABAP类,该节点对应的Url通过浏览器或者Postman,或者其他编程语言访问时,ABAPICF框架就会自动调用绑定的ABAP类。 也就是说,应用开发人员只需要在ABAP类里实现业务逻辑,至于这个类运行时的实例如何被ICF调用,如何初始化和销毁等生命周期管理,ABAP开发人员完全不用操心。 关于更多ABAPICF的介绍,请参考我的文章:一个13年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害。 (5)基于JavaSpringBoot,NodeExpress等Web应用框架的API开发 采用此类开发方式的生态圈是全球最庞大最活跃的群体,技术成熟稳定,相关文档和教材非常丰富。更新更先进的开发框架也在不断演化。开发人员通常在本地完成开发,再将应用部署到服务器上运行。也可以将应用打包成容器镜像,再以容器的方法运行在物理服务器或者SAP云平台,AWS,GoogleCloudPlatform,Azure等各种云上。容器数量到达一定规模之后,可以采用Kubernetes进行编排管理。 Jerry这篇文章介绍了一个例子:在SAP云平台上部署和运行Docker应用。 Jerry之前的项目里也消费过SAPCommerce的WebService:如何使用API的方式消费SAPCommerceCloud的订单服务。 (6)Serverless架构 云计算行业里的一个热门词汇,Serverless架构,并不意味着采用这个架构后就再也不需要服务器了,而是指应用开发人员不用关心开发好的应用如何部署到服务器,不需要考虑服务器的运行状态等运营和维护问题。传统Web应用的开发思路,如Jerry之前介绍的那样,通常在本地完成开发和单元测试,然后需要考虑采用何种方式,部署到何种服务器或者云上。 而基于Serverless架构的API服务开发,根本就没有API部署的这个步骤。以Jerry之前介绍过的SAPKyma上的LambdaFunction为例,API函数本身的代码编写就是在云上完成。一旦保存,只要API维护的触发条件满足(事件触发或者Url触发),该API立即被调用。 下图是我在SAPKyma里使用nodejs编写的一个LambdaFunction: 我设置其通过HTTPS的方式被调用: 在浏览器里访问这个HTTPSendpoint,LambdaFunction立即执行。 从这个角度讲,Jerry觉得ABAP开发人员,在开发API的时候,一直就在享受着Serverless架构带来的便利。因为ABAP领域的开发,无论是通过SAPGUI,ABAPDevelopmentTool,还是通过各种KeyUser工具,本质上都是连接到ABAPNetweaver这个集应用开发和运行为一体的服务器上进行的,因而根本没有传统Javanodejs开发里的应用部署这一环节。 关于更多如何使用LambdaFunction实现API的介绍,请参考Jerry的文章: 从ABAPNetweaver的SICF到SAPKyma的LambdaFunction 周伯通的空明拳,米诺斯的星尘傀儡线,SAPKyma的Serverless (7)SAPDataIntelligenceGraph 这种方式严格来讲也算基于Serverless,使用者通过浏览器登录SAPDataIntelligence控制台,进行Graph建模。完成后启动,Graph就直接运行在SAPCloudPlatform的Kubernetes基础设施上了。 之所以把这种方式单独拿出来介绍,是因为其又具有LowCodeDevelopment(低代码开发)的特质。 看一个具体的例子。 假设我想实现一个支持CRUD的API,消费者通过HTTPGET,POST和DELETE请求,能够在数据库里分别读取,插入和删除一条记录。 低代码开发平台,通常都提供了图形化的用户界面,给使用者提供了通过拖拽组件和模型驱动开发的方式,结合少量的编码来快速创建应用或者API。 访问SAPDataIntelligenceLaunchpad,进入Modeler: 我们像小朋友搭积木一样,从左边的工具箱里,拖拽HTTPServer和若干个JavaScriptHandler到编辑页面里。 这些积木一样的组件搭配在一起,如何就实现了支持增删改查的API功能的呢?由于篇幅原因,Jerry后续的文章会介绍,敬请继续关注。 更多阅读 SAPOData编程指南 30分钟用RestfulABAPProgramming模型开发一个支持增删改查的Fiori应用 一个13年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害 在SAP云平台上部署和运行Docker应用 如何使用API的方式消费SAPCommerceCloud的订单服务 从ABAPNetweaver的SICF到SAPKyma的LambdaFunction 周伯通的空明拳,米诺斯的星尘傀儡线,SAPKyma的Serverless 从SAPLeonardo到SAPDataIntelligence