从SAP中暴露REST API:完整实操接口开发指南
核心摘要 :本文提供一份零基础可操作的SAP REST API开发指南,通过5个清晰步骤,从SICF配置到Postman测试全流程演示,帮助SAP开发者快速构建接收JSON参数、返回SFLIGHT表数据的API接口。
📋 教程全景导览
在SAP系统开发中,REST API是实现系统间数据交互的核心方式之一 。本文将带您一步步完成从SAP暴露REST API的全过程,该API接收JSON格式的CARRID参数,并返回SFLIGHT表中的相关数据,适合SAP开发初学者快速上手。
一、前期准备
| 准备事项 | 具体说明 | 备注 |
|---|---|---|
| 权限准备 | 确保具备SAP系统操作权限,可访问TCode:SICF(定义服务)、SE24(类构建器) | 必要权限 |
| 测试数据 | 若SFLIGHT表无测试数据,需准备程序SAPBC_DATA_GENERATOR用于生成测试数据 | 可选准备 |
| 测试工具 | 准备API测试工具(如Postman),用于后续接口验证 | 推荐使用 |
二、步骤详解
步骤1:通过SICF创建服务节点
-
启动SICF :输入TCode SICF,进入"定义服务"界面,按屏幕提示填写筛选条件(语言默认选择English),点击"执行"。

-
导航至路径 :在左侧层级结构中,导航至
default_host → sap → bc,右键点击"bc",选择"新建子元素"。

-
创建服务 :弹出SAP命名空间提示框,直接点击"确定",输入服务名称(示例:ZTESTM1),选择"独立服务"类型,点击"确定"。

-
配置服务数据 :进入服务配置界面,切换至"服务数据"标签页,填写描述(示例:For Test),其他保持默认。

-
设置登录数据 :切换至"登录数据"标签页,选择"使用所有登录程序",安全会话设为"无限制",认证方式选择"标准SAP用户"。

-
指定处理器 :切换至"处理器列表"标签页,输入服务处理器类名称(ZCL_HTTPHANDLER),点击"保存"(此时会提示类不存在,后续将创建)。

abap
// 注意:此时保存会收到警告"类ZCL_HTTPHANDLER不存在"
// 这是正常情况,我们将在下一步创建此类
步骤2:通过SE24创建处理器类
-
启动SE24 :输入TCode SE24 ,进入类构建器,输入类名称ZCL_HTTPHANDLER,点击"创建"。

-
配置类属性 :在创建类界面,填写描述(HTTP Request Handler),实例生成设为"公开",类类型选择"常规ABAP类",点击"保存"。

-
设置本地对象 :弹出"创建对象目录条目"窗口,选择"本地对象",点击"确定"。

-
添加接口 :切换至"接口"标签页,输入接口名称IF_HTTP_EXTENSION,点击"添加"并激活接口。

-
定义属性 :切换至"属性"标签页,添加属性IF_HTTP_SERVER,类型设为REF TO IF_HTTP_SERVER,可见性设为"受保护"。

-
进入方法编辑 :切换至"方法"标签页,系统会自动生成方法IF_HTTP_EXTENSION~HANDLE_REQUEST,双击该方法名称,进入代码编辑界面。


关键点:IF_HTTP_EXTENSION接口是SAP HTTP处理器必须实现的接口,它包含handle_request方法,用于处理所有HTTP请求。
步骤3:编写方法逻辑(核心步骤)
在方法IF_HTTP_EXTENSION~HANDLE_REQUEST中输入以下ABAP代码,实现JSON payload解析、SFLIGHT表查询及响应返回:
abap
METHOD if_http_extension~handle_request.
TYPES : BEGIN OF ty_in_data,
carrid TYPE s_carr_id,
END OF ty_in_data,
BEGIN OF ty_error,
type TYPE char1,
message TYPE char50,
END OF ty_error.
DATA : _request_data TYPE string,
respons_data_ TYPE string,
_s_jsoninput TYPE ty_in_data,
_t_error TYPE STANDARD TABLE OF ty_error,
o_response_ TYPE REF TO if_http_response,
_o_exception TYPE REF TO cx_root.
FIELD-SYMBOLS : <fs_outtab> TYPE ANY TABLE.
_http_server = server.
TRY.
* 解析JSON请求体
_request_data = server->request->get_cdata( ).
CALL METHOD /ui2/cl_json=>deserialize
EXPORTING
json = _request_data
pretty_name = /ui2/cl_json=>pretty_mode-camel_case
CHANGING
data = _s_jsoninput.
IF _s_jsoninput IS NOT INITIAL.
* 查询SFLIGHT表数据
SELECT * FROM sflight INTO TABLE @DATA(_t_sflight)
WHERE carrid EQ @_s_jsoninput-carrid.
ASSIGN _t_sflight TO <fs_outtab>.
IF sy-subrc IS NOT INITIAL.
* 无数据时返回错误信息
_t_error = VALUE #( BASE _t_error ( type = 'E' message = 'No data found' ) ).
ASSIGN _t_error TO <fs_outtab>.
ENDIF.
ELSE.
* 空请求体时返回错误信息
_t_error = VALUE #( BASE _t_error ( type = 'E' message = 'Empty Payload' ) ).
ASSIGN _t_error TO <fs_outtab>.
ENDIF.
* 转换结果为JSON格式并返回
IF <fs_outtab> IS ASSIGNED.
respons_data_ = /ui2/cl_json=>serialize(
data = <fs_outtab>
compress = abap_false
pretty_name = /ui2/cl_json=>pretty_mode-camel_case ).
o_response_ = _http_server->response.
o_response_->set_status( code = '200' reason = 'OK' ).
o_response_->set_content_type( 'application/json' ).
o_response_->set_cdata( respons_data_ ).
ELSE.
o_response_->set_status( code = '500' reason = 'Internal Server Error' ).
ENDIF.
CATCH cx_root INTO _o_exception.
_http_server->response->set_status( code = 500 reason = 'Internal Server Error' ).
ENDTRY.
ENDMETHOD.
代码编写完成后,点击"保存"并"激活"类和方法。
步骤4:激活SICF服务
- 返回SICF:返回TCode SICF界面,找到创建的服务ZTESTM1,右键点击该服务。
- 激活服务:选择"激活",在弹出的确认窗口中点击"确定",完成服务激活。
注意:只有在处理器类创建并激活后,SICF服务才能成功激活。
步骤5:API测试(Postman实操)
测试准备
| 准备项 | 具体说明 |
|---|---|
| 获取URL | 从Basis团队获取API访问URL(格式示例:https://[SAP服务器地址]/sap/bc/ZTESTM1) |
| 数据准备 | 若SFLIGHT表无数据,执行程序SAPBC_DATA_GENERATOR生成测试数据 |
正常请求测试
- 打开Postman ,选择请求方式为GET。
- 输入API URL,在"Body"标签页选择"raw",格式设为JSON。
- 输入请求参数 :
{"carrid": "AA"},点击"发送"。 - 成功响应:返回200 OK状态码,包含SFLIGHT表中CARRID为"AA"的航班数据(如机型、价格、座位数等)。
异常场景测试
| 测试场景 | 输入 | 预期响应 |
|---|---|---|
| 空请求体 | 不输入任何JSON参数 | {"type":"E","message":"Empty Payload"} |
| 无数据测试 | {"carrid": "ZZ"} |
{"type":"E","message":"No data found"} |
三、关键注意事项
| 序号 | 注意事项 | 说明 |
|---|---|---|
| 1 | 避免在SAP命名空间(/sap)下创建自定义节点 | 后续系统升级可能被覆盖 |
| 2 | 确保处理器类ZCL_HTTPHANDLER已正确实现IF_HTTP_EXTENSION接口 | 否则服务无法正常响应 |
| 3 | 测试时若出现权限问题,需检查SAP用户的相关授权配置 | 包括HTTP服务权限和表访问权限 |
| 4 | 接口返回格式为JSON,前端系统可直接解析使用 | 无需额外格式转换 |
📝 总结与扩展
通过以上五个步骤,您已成功从SAP中暴露REST API并实现数据交互。这个简单的航班查询API展示了SAP系统与现代应用架构融合的基本模式。
如需扩展功能(如增加查询条件、权限校验、分页支持等),可在处理器类的handle_request方法中修改代码逻辑。现代SAP开发也推荐考虑OData服务作为替代方案,它提供了更丰富的元数据和标准化的查询能力。