SAP 浅谈 Rest 接口应用发布篇

作者:郑德鼎 约 6 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
SAP 浅谈 Rest 接口应用发布篇 - 封面图
SAP 浅谈 Rest 接口应用发布篇 - 封面图

**引言**

系统间交互的接口方式多种多样,普遍的有数据库直连、RFC、web服务、FTP、EDI/IDOC、中间件、Odata等等,特殊的还有像金税接口和银企直连等需要业务端同步做配置。

本次介绍其中一种RestFul风格的与外围系统交互。

REST(Representational State

Transfer)并不是什么协议也不是什么标准,是一种构架风格,REST指的是一组架构约束条件和原则,是将Http协议的设计初衷作了诠释。

SOAP类型的 WebService,完全是将Http协议作为消息承载,对于Http协议中的各种参数(例如编码,错误码 等)都没有关注。

RESTful 简化了 web service 的设计,它不再需要 wsdl ,也不再需要 soap 协议, 而是通过最简单的 http 协议传输数据 (

包括 xml 或 json) 。

既简化了设计,也减少了网络传输量 (因为只传输代表数据的 xml 或 json ,没有额外的 xml 包装),其架构遵循CRUD原则,

该原则 告诉我们对于资源(包括网络资源)只需要四种行为:创建,获取,更新和删除就可以完成相关的操

作和处理,所以核心操作只有GET,PUT,POST,DELETE。

常规接口开发均以POST方式为主,本文也以POST结合具体例子讲解。

**** **SAP发布Rest接口流程简介**

**1\. SICF配置节点**

Tcode:SICF

SAP 浅谈 Rest 接口应用发布篇 - 封面图
SAP 浅谈 Rest 接口应用发布篇 - 封面图

**2\. 维护新建服务的相关信息**

主要是维护处理器清单页签:外部系统向sap发送请求的时候,此处定义的类就负责处理请求。

SAP 浅谈 Rest 接口应用发布篇 - 封面图
SAP 浅谈 Rest 接口应用发布篇 - 封面图

其他页签可以选择不维护。

登录数据页签可配置:用户名密码,这样对方在调用时便不需验证,并可配置http/https方式。

错误页页签可配置:当SAP服务端的资源发生错误的时候,配置一些自定义的返回内容。

配置完成保存并激活服务。

SAP 浅谈 Rest 接口应用发布篇 - 封面图
SAP 浅谈 Rest 接口应用发布篇 - 封面图

右键该服务选择测试服务,即为接口对应的地址。

**3\. 创建处理类**

Tcode:SE24

①接口页签必须维护:IF_HTTP_EXTENSION

SAP 浅谈 Rest 接口应用发布篇 - 封面图
SAP 浅谈 Rest 接口应用发布篇 - 封面图

维护之后方法页签里会自动出现一个http相关的方法:

IF_HTTP_EXTENSION~HANDLE_REQUEST

在这个方法中去实现处理http请求的操作。

②方法实现过程

②-1 * 获取对方请求方式

lv_method_name = server->request->get_method( ).

该方法可以获取外围系统发送http请求的方法类型:GET、POST等之类。

我们便可以根据外围系统的请求方法来进行不同的处理。

②-2 * 获取对方请求数据

lv_data = server->request->if_http_entity~get_cdata( ).

②-3 "JSON转ABAP 解析请求内容

CALL METHOD /ui2/cl_json=>deserialize

EXPORTING

json = lv_data "server->request->if_http_entity~get_cdata( )" lv_data

CHANGING

data = ls_head. "拿到HEAD信息判断接口类型

②-4 根据解析的数据做相应处理,比如可以约定接口ID,根据不同接口ID调用不通接口对应的方法

SAP 浅谈 Rest 接口应用发布篇 - 封面图
SAP 浅谈 Rest 接口应用发布篇 - 封面图
SAP 浅谈 Rest 接口应用发布篇 - 封面图
SAP 浅谈 Rest 接口应用发布篇 - 封面图

②-5 * 设置HTTP的响应状态码,只要接口正常运行CODE都设置200

\-----一般情况可以不做此步操作,http会自动返回,有特殊需求时可以设置特殊code类型

server->response->set_status( code = '200' reason = 'OK' ).

• 将返回内容发出

CALL METHOD server->response->set_cdata

EXPORTING

data = lv_data_out

offset = 0

length = lv_len.

• 定义格式

CALL METHOD server->response->set_header_field

EXPORTING

name = 'Content-Type'

value = 'application/json; charset=utf-8'.

③将处理类保存并激活

**4\. 提供接口示例给第三方系统**

restful接口常规报文是以json形式发送,所以接口双方要各自约定报文格式,提供明确的示例给对方系统用来开发。

示例内容以具体业务需求为准。

以下示例为供应商接口,仅供参考。

传入示例:

{

"HEADER": {

"BATCHCOUNT": "1",

"BATCHNUM": "20210112043537",

"INTERFACECODE": "SRM_IF_SUPPLIER"

},

"BODY": [

{

"RESULTID": "1",

"CREATION_GROUP": "J020",

"PARTNER_ROLE": "JIE001X",

"LIFNR": "TEST",

"ANRED": "TEST",

"NAME1": "TEST",

"SORTL": "TEST",

"STRAS": "TEST",

"PSTLZ": "TEST",

"ORT01": "TEST",

"LAND1": "TEST",

"SPRAS": "1",

"TELF1": "TEST",

"TELF2": "TEST",

"TELFX": "TEST",

"KTOKK": "TEST",

"SPERM": "X",

"LFM1_INFO": [

{

"EKORG": "TEST",

"WAERS": "CNY",

"ZTERM": "TEST",

"INCOV": "TEST",

"INCO1": "TEST",

"INCO2_L": "TEST",

"INCO3_L": "TEST",

"VERKF": "TEST",

"TELF1": "TEST",

"WEBRE": "X",

"EKGRP": "TEST",

"PLIFZ": "10",

"SPERM_M1": "X"

}

],

"LFB1_INFO": [

{

"ZUAWA": "TEST",

"AKONT": "TEST",

"ZTERM": "TEST",

"REPRF": "TEST",

"WEBTR": "123.12",

"ZWELS": "TEST",

"TOGRU": "TEST",

"ZAHLS": "TEST",

"BUKRS": "TEST",

"STENR": "TEST"

}

]

}

]

}

返回示例:

{

"BATCHNUM": "20210112043537",

"STATUS": "E",

"MESSAGE": "本次调用发生错误,具体请查看行项目返回信息",

"ITEM_INFO": [

{

"RESULTID": "1",

"STATUS_ITEM": "E",

"MESSAGE_ITEM": "供应商XXX已存在"

}

]

}

**5\. 调试**

在双方系统联调之前,可以通过第三方工具POSTMAN进行接口的调试。

以上述发布的接口为例。

SAP 浅谈 Rest 接口应用发布篇 - 封面图
SAP 浅谈 Rest 接口应用发布篇 - 封面图
SAP 浅谈 Rest 接口应用发布篇 - 封面图
SAP 浅谈 Rest 接口应用发布篇 - 封面图

发布篇的介绍到此为止,希望下一期还有机会发表接收篇,谢谢。

SAP 浅谈 Rest 接口应用发布篇 - 封面图
SAP 浅谈 Rest 接口应用发布篇 - 封面图

作者丨孔 倩

审核丨郑 浩

编辑丨王 锐

郑德鼎

关于作者:郑德鼎

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「SAP浅谈Rest接口应用发布篇.md」整理生成,仅用于内部技术分享与学习交流。