SAPAPI 的发布及调用第三方 API

作者:郑德鼎 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Basis, Data Engineering, MM, PP, SD, 开发, 数据工程, 物料管理, 生产, 系统管理, 销售分销
SAPAPI 的发布及调用第三方 API - 封面图
SAPAPI 的发布及调用第三方 API - 封面图

在实施项目的过程中SAP通常要与第三方系统集成,SAP也提供了如RFC、 WebService 等多种接口方式。今天我们了解一下API的集成方式。

一、SAP如何发布API

SAP作为服务提供方被第三方调用,就需要定义一个自定义类,这个类需要实现IF_HTTP_EXTENSION 接口, IF_HTTP_EXTENSION

接口只有一个方法 HANDLE_REQUEST。自定义的这个类必须实现 HANDLE_REQUEST 方法 。然后用事务码SICF创建服务并激活。

接下来我们一步一步做一下。首先用事务码SE 24 创建自定义类: Z_TEST_RESTFUL 。

SAPAPI 的发布及调用第三方 API - 封面图
SAPAPI 的发布及调用第三方 API - 封面图

在接口 页签下输入 IF_HTTP_EXTENSION,然后回车,再到方法页签下双击 IF_HTTP_EXTENSION~HANDLE_REQUEST

进到代码中。

SAPAPI 的发布及调用第三方 API - 封面图
SAPAPI 的发布及调用第三方 API - 封面图

在这里我们将查询物料及其描述,并将数据以JSON格式输出。当然这种方式不仅仅支持查询数据,还可以支持POST/ PUT/DELETE 等方式。

可根据代码 server->request->get_header_field( '~request_method' )获取GET/POST/

PUT/DELETE方式

。获得具体方式后,可根据不同的方式,实现不同的业务逻辑。需要说明的是API是以JSON作为交互的数据格式,由于第三方系统的不同,在JSON解析时可能会有差异,需要灵活应对。本例仅以GET方式举例。

SAPAPI 的发布及调用第三方 API - 封面图
SAPAPI 的发布及调用第三方 API - 封面图

接下来用事务码SICF配置服务和激活,在 /default_host/sap/ 目录下新建 ZTEST ,在处理器清单页签下输入自定义类

Z_TEST_RESTFUL ,保存。

SAPAPI 的发布及调用第三方 API - 封面图
SAPAPI 的发布及调用第三方 API - 封面图

激活后,选中 ZTEST 右键可以测试服务,即可以看到 SAP提供的服务路径和测试结果。

SAPAPI 的发布及调用第三方 API - 封面图
SAPAPI 的发布及调用第三方 API - 封面图

也可用其他测试工具进行测试,效果是一样的。这样SAP发布API服务。

SAPAPI 的发布及调用第三方 API - 封面图
SAPAPI 的发布及调用第三方 API - 封面图

二、SAP调用第三方API

SAP调用第三方API主要分为五个步骤: 1\. 根据第三方提供URL创建HTTP服务。

由于开发、测试、生产系统各不相同,可以采用配置表形式存储URL,根据URL创建客户端请求。

"创建客户端请求

CALL METHOD cl_http_client => create_by_url

EXPORTING

url = lv_url

IMPORTING

client = lo_http_client

EXCEPTIONS

argument_not_found = 1

plugin_not_active = 2

internal_error = 3

OTHERS = 4 .

2\. 设置http request的参数(如: Content-Type 、~ request_method 等)。

“ 设定传输请求内容格式以及编码格式

lo_http_client -> request -> set_content_type ( content_type =

'application/JSON; charset=utf-8' ).

"设定调用服务

lo_http_client -> request -> set_method ( if_http_request =>

co_request_method_get ).

"设置调用方法

CALL METHOD lo_http_client -> request -> set_header_field

EXPORTING

name = '~request_method'

value = 'POST' .

3\. 把传输数据转换成JSON格式。

由于第三方系统格式的不同,需要构造复杂的数据类型,还涉及字符替代等,可根据具体情况具体分析。

"设置待传输内容 代码

lv_len = strlen ( lv_json_str ). CALL METHOD http_client_data -> request -> set_cdata

EXPORTING

data = lv_json_str

offset = 0

length = lv_len .

4\. 发送http请求。

"发送数据

lo_http_client -> send (

EXCEPTIONS

http_communication_failure = 1

http_invalid_state = 2

http_processing_failed = 3

http_invalid_timeout = 4

OTHERS = 5 ).

5\. 接收返回的数据,判断调用是否成功。

先接收返回数据内容,再获取其中内容进行判断是否成功。注意获取的数据格式也为JSON。

"接收返回

lo_http_client -> receive (

EXCEPTIONS

http_communication_failure = 1

http_invalid_state = 2

http_processing_failed = 3 ).

"提取返回字符串

IF sy \- subrc EQ 0 . gv_json_out = lo_http_client -> response -> get_cdata ( ). CALL METHOD lo_http_client -> response -> get_status

IMPORTING

code = p_code

reason = p_reason .

ELSE .

CALL METHOD lo_http_client -> get_last_error

IMPORTING

code = l_sysubrc

message = l_error .

MESSAGE l_error TYPE 'S' DISPLAY LIKE 'E' .

RETURN .

ENDIF .

至此结束。

郑德鼎

关于作者:郑德鼎

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

来源说明:本文内容由「SAPAPI的发布及调用第三方API.md」整理生成,仅用于内部技术分享与学习交流。