SWAGGER 在 ABAP 中的实现

作者:ABAP三叔 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, 开发, 数据工程
SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图

前言

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。

GITHUB上有一个开源的ZCL_SWAG项目,我基于此基础做了一些优化,并加入了接口日志记录,本文将为大家介绍这个框架的使用方法。

项目结构介绍

项目整体结构如下

SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图

1.表ZTSWAG_EXT_SYS

定义外部系统名称和描述

SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图

2\. 表ZTSWAG_IF

定义接口配置

SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图

3.表ZTSWAG_LOG

存储接口日志

4.类ZCL_SWAG

请求到达处理类后,具体由哪个类&方法来处理,在这个类中判断,并将最终结果返回给请求端;接口通用日志也在这个类中处理

5.类ZCL_SWAG_BASE_HANDLER

HTTP处理类的基类,实现了IF_HTTP_EXTENSION接口。所有接口的请求都首先在这个类的if_http_extension~handle_request方法中处理。

6\. 类ZCL_SWAG_REST_HANDLER

HTTP处理类,继承了 Z CL_SWA G_BASE_HANDLER类。在SICF中配置接口的处理类,就填入这个类

7\. 类ZCL_SWAG_CONSUMER

实现了ZIF_SWAG_CONSUMER接口,最终端的接口处理类,这个类中可定义请求路由,每个不同的请求,由不同的类方法来处理,在类方法中进行业务处理,并最终返回数据给请求端

8.类ZCL_SWAG_MAP_TYPE和类ZCL_SWAG_SPEC

主要用来生成SWAGGER UI界面

9.接口ZIF_SWAG_CONSUMER

接口方法META,定义请求路由

接口属性MV_BASE,定义请求的根路径

10.报表ZSWAG_LOG_MONITOR

查询接口日志

实现过程

Z C L_SW AG_REST_HA NDLER 和 ZCL_SWAG_CONSUMER

类,用户可复制,自行定义接口的根路径、接口路由、接口处理逻辑。

1. 首先配置 ZTSWAG_EXT_SYS和 ZTSWAG_IF,见过程02

2. ZCL_SWAG_REST_HANDLER类定义

SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图

定义接口的根路径为'/zapi'

3.ZCL_SWAG_CONSUMER类定义

SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图

设置根路径为 路径为'/zapi'

实现meta方法, meta方法如下

METHOD zif_swag_consumer~meta. FIELD-SYMBOLS: <ls_meta> LIKE LINE OF rt_meta. APPEND INITIAL LINE TO rt_meta ASSIGNING <ls_meta>. <ls_meta>-summary = '获取工厂信息'. <ls_meta>-url-regex = '/IF001/'. <ls_meta>-method = zcl_swag=>c_method-post. <ls_meta>-handler = 'GET_PLANT'. APPEND INITIAL LINE TO rt_meta ASSIGNING <ls_meta>. <ls_meta>-summary = '获取公司信息'. <ls_meta>-url-regex = '/IF002/'. <ls_meta>-method = zcl_swag=>c_method-post. <ls_meta>-handler = 'GET_BUKRS'. ENDMETHOD.

IF001 接口由 GET_PLANT 方法处理, IF002 接口由 GET_BUKRS 方法处理。

GET_PLANT 方 法如下

METHOD get_plant. SELECT werks,name1 INTO TABLE @DATA(lt_werks) FROM t001w. rv_response-response = /ui2/cl_json=>serialize( data = lt_werks compress = abap_false pretty_name = abap_true ). rv_response-msgty = 'S'. rv_response-msg = 'Success'. ENDMETHOD.

GET_BUKRS 方法如下

METHOD get_bukrs. SELECT bukrs,butxt INTO TABLE @DATA(lt_bukrs) FROM t001. rv_response-response = /ui2/cl_json=>serialize( data = lt_bukrs compress = abap_false pretty_name = abap_true ). rv_response-msgty = 'S'. rv_response-msg = 'Success'. ENDMETHOD.

GET_PLANT 和 GET_BUKRS 方法的出入参是一样的,如下

SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图

4\. 创建SICF服务并激活

SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图

至此配置完毕

效果展示

1\. SWAGGER UI 界面

SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图

在这里可以测试各个接口,并获取返回结果

2.接口日志查询

SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图
SWAGGER 在 ABAP 中的实现 - 封面图

总结

**GITHUB仓库地址** :https://github.com/a87b01c14/ZSWAGGER.git

欢迎下载、STAR,有宝贵意见的请留言 :)

ABAP三叔

关于作者:ABAP三叔

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

来源说明:本文内容由「SWAGGER在ABAP中的实现.md」整理生成,仅用于内部技术分享与学习交流。