为了完善API接口,增强友好性,做了一点小文档展示。

新建配置表:(用来做接口参数配置展示使用,不在程序中应用)

因为需要给每个接口一个对应的名字,所以在原来的API控制表中增加一个文本字段。

这里加了俩个测试用的接口名对应参数表数据如下:

下面就要在API的默认GET方法中展示出来。

  METHOD if_http_extension~handle_request.
TYPES:BEGIN OF ty_retu,
success TYPE string,
access_token TYPE string,
message TYPE string,
END OF ty_retu. DATA: lt_fields TYPE tihttpnvp,
lv_data TYPE string,
lv_retu TYPE string,
gw_retu TYPE ty_retu,
lv_ifid TYPE string,
lv_method TYPE string,
gv_json TYPE string,
gt_api TYPE TABLE OF zapi_param,
gw_api LIKE LINE OF gt_api,
gw_con TYPE zapi_control,
gv_flag TYPE flag,
gv_new_meth TYPE c,
gv_type TYPE c LENGTH 10,
gv_new_io TYPE c. FIELD-SYMBOLS: <fs_field> LIKE LINE OF lt_fields. "限定不做GET方法,GET根方法作为API文档说明 lv_ifid = server->request->get_form_field( name = 'IFID' )."GET INTERFACE ID
lv_method = server->request->get_header_field( name = '~request_method' )."GET INTERFACE METHOD
"CHECK CONTROL TABLE IF lv_ifid IS INITIAL AND lv_method = 'GET'.
SELECT * INTO TABLE gt_api FROM zapi_param.
lv_retu = lv_retu && '<html><body>'. lv_retu = lv_retu && '<H1><center>Hisense API Document</center></H1>'. "说明
lv_retu = lv_retu && '<I>Hisense API document is online from 2020.This is for public purpose to get connection to our system</I>'.
lv_retu = lv_retu && '<br>'.
lv_retu = lv_retu && '<br>'.
lv_retu = lv_retu && '<br>'. LOOP AT gt_api INTO gw_api.
AT NEW zmethod.
gv_new_meth = 'X'.
ENDAT.
AT NEW zinout.
gv_new_io = 'X'.
ENDAT. IF gv_new_meth = 'X'.
"二级标题 接口名
SELECT SINGLE * INTO gw_con FROM zapi_control WHERE zif_id = gw_api-zif_id AND zmethod = gw_api-zmethod.
lv_retu = lv_retu && '<H2>---------------' && gw_con-zme_name && '-----------------</H2>'.
* lv_retu = lv_retu && 'order create API'. "三级标题 接口说明
lv_retu = lv_retu && '<H3>HTTP Request</H3>'. "文本 接口URL
lv_retu = lv_retu && 'POST www.gjyxcrmdev.crm.hisense.com:8000/sap/zapi?ITID=' && gw_api-zif_id.
lv_retu = lv_retu && '<br>'.
lv_retu = lv_retu && '<br>'.
lv_retu = lv_retu && '<br>'.
CLEAR gv_new_meth.
ENDIF. IF gv_new_io = 'X'.
IF gw_api-zinout = 'I'.
lv_retu = lv_retu && '<H3>Request Body Parameters</H3>'.
lv_retu = lv_retu && '<br>'.
ELSEIF gw_api-zinout = 'O'.
lv_retu = lv_retu && '<H3>Response Body Parameters</H3>'.
lv_retu = lv_retu && '<br>'.
ENDIF. "字段属性说明
lv_retu = lv_retu && '<table border="1">'.
lv_retu = lv_retu && '<td>' && 'Parameter' && '</td>'.
lv_retu = lv_retu && '<td>' && 'Type' && '</td>'.
lv_retu = lv_retu && '<td>' && 'Status' && '</td>'.
lv_retu = lv_retu && '<td>' && 'Description' && '</td>'.
gv_new_io = ''.
ENDIF. "字段
lv_retu = lv_retu && '<tr>'.
lv_retu = lv_retu && '<td>' && gw_api-zparameter && '</td>'.
CALL FUNCTION 'CONVERSION_EXIT_DTYPE_OUTPUT'
EXPORTING
input = gw_api-type
IMPORTING
output = gv_type.
lv_retu = lv_retu && '<td>' && gv_type && '</td>'.
lv_retu = lv_retu && '<td>' && gw_api-status && '</td>'.
lv_retu = lv_retu && '<td>' && gw_api-description && '</td>'.
lv_retu = lv_retu && '</tr>'. AT END OF zinout.
lv_retu = lv_retu && '</table>'.
lv_retu = lv_retu && '<br>'.
ENDAT.
ENDLOOP. * CONCATENATE 'T1:{'
* cl_abap_char_utilities=>newline
* 'HEAD:{'
* cl_abap_char_utilities=>newline
* `"PROCESS_TYPE":"ZSV1"`
* cl_abap_char_utilities=>newline
* `"POSTING_DATE":"20201124"`
* cl_abap_char_utilities=>newline
* `"ITEM":{`
* cl_abap_char_utilities=>newline
* `"NO":"10"`
* cl_abap_char_utilities=>newline
* `"PRODUCT":"TEST12333"`
* cl_abap_char_utilities=>newline
* `}`
* cl_abap_char_utilities=>newline
* '}'
* cl_abap_char_utilities=>newline
* '}'
* INTO gv_json. * lv_retu = lv_retu && '<I>' && gv_json && '</I>'.
"结束
lv_retu = lv_retu && '</body></html>'.
"SET RETURN DATA
server->response->if_http_entity~set_content_type( content_type = 'Text/HTML' ).
server->response->set_cdata(
EXPORTING
data = lv_retu " Character data
).
ELSE. SELECT SINGLE * INTO gw_con FROM zapi_control WHERE zif_id = lv_ifid AND zmethod = lv_method.
IF sy-subrc <> 0.
gw_retu-success = 'E'.
gw_retu-message = 'Called Error,Please check the url or method!'. lv_retu = /ui2/cl_json=>serialize(
data = gw_retu
pretty_name = 'L'
compress = abap_true ).
ELSE.
CASE gw_con-zflag."used flag
WHEN 'X'.
*""GET HTTP MESSAGE BODY
lv_data = server->request->if_http_entity~get_cdata( ). "call method
CALL FUNCTION gw_con-zpro_fm
EXPORTING
input = lv_data
IMPORTING
output = lv_retu. WHEN ''.
gw_retu-success = 'E'.
gw_retu-message = 'Interface Not Used!'. lv_retu = /ui2/cl_json=>serialize(
data = gw_retu
pretty_name = 'L'
compress = abap_true ).
WHEN OTHERS.
ENDCASE.
ENDIF. "SET RETURN DATA
server->response->if_http_entity~set_content_type( content_type = 'application/json' ).
server->response->set_cdata(
EXPORTING
data = lv_retu " Character data
).
ENDIF. ENDMETHOD.

SICF测试服务,效果如下:

SAP发布简易REST 三:API平台之接口文档的更多相关文章

  1. 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(二)

    传送门:从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一) 一.设置Swagger页面为首页--开发环境 我们虽然可以在输入 /swagger 后顺利的访问 ...

  2. Web API 自动生成接口文档

    1.添加NuGet程序包 Microsoft ASP.NET Web API 2.2 Help Page      (这是微软官方的) A Simple Test Client for ASP.NET ...

  3. 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一)

    一.创建ASP.NET Core Web API项目(若项目已创建,则可跳过本节内容) 1.双击打开VS2022. 2.单击"创建新项目",如下图. 3.选择"ASP.N ...

  4. 使用swagger实现web api在线接口文档

    一.前言 通常我们的项目会包含许多对外的接口,这些接口都需要文档化,标准的接口描述文档需要描述接口的地址.参数.返回值.备注等等:像我们以前的做法是写在word/excel,通常是按模块划分,例如一个 ...

  5. 研发团队如何写好API接口文档

    导读 背景 痛点在哪? 为什么要写接口文档? API规范 接口工具 总结 背景        随着业务的发展,支撑组的项目也是越来越多.同时,从整个支撑组项目架构体系(含运维和运营体系),我们对系统业 ...

  6. 三 drf 认证,权限,限流,过滤,排序,分页,异常处理,接口文档,集xadmin的使用

    因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py createsuperuser 创建管理员以后,访问admin站点 ...

  7. 使用swagger实现web api在线接口文档(转载)

    一.前言 通常我们的项目会包含许多对外的接口,这些接口都需要文档化,标准的接口描述文档需要描述接口的地址.参数.返回值.备注等等:像我们以前的做法是写在word/excel,通常是按模块划分,例如一个 ...

  8. RESTful (俗称:api接口文档)

    整体规范建议采用RESTful 方式来实施. 协议 API与用户的通信协议,总是使用HTTPs协议,确保交互数据的传输安全. 域名 应该尽量将API部署在专用域名之下.https://api.exam ...

  9. 【开源】.Net Api开放接口文档网站

    开源地址:http://git.oschina.net/chejiangyi/ApiView 开源QQ群: .net 开源基础服务  238543768 ApiView .net api的接口文档查看 ...

  10. api(接口)文档管理工具

    api(接口)文档管理工具 欢迎光临:博之阅API管理平台  ,做为一个app开发者,还没有用到api管理工具,你就OUT了 点击进入:程序员精华博客大全  

随机推荐

  1. Django实战项目-学习任务系统-发送邮件通知

    接着上期代码内容,继续完善优化系统功能. 本次增加发送邮件通知功能,学习任务系统发布的任务,需要及时通知到学生用户知晓. 由于目前智能手机普及,人人都离不开手机,所以手机端接收通知信息更加及时有效. ...

  2. python正则表达式笔记2

    由 '\' 和一个字符组成的特殊序列在以下列出. 如果普通字符不是ASCII数位或者ASCII字母,那么正则样式将匹配第二个字符.比如,\$ 匹配字符 '$'. \number匹配数字代表的组合.每个 ...

  3. 接口介绍以及定义和使用--java进阶day02

    1.接口介绍 日常生活中有很多接口,比如手机数据线的接口和手机充电器的接口 我们转换视角,站在设计者的角度思考接口,接口体现出规则,手机的接口大小和数据线的接口大小必须一致,各种接口的大小都要一致,都 ...

  4. 学习unigui【23】uniDBGrid的使用摘要

    Unidbgrid自动调整列宽 UniDBGrid1 -> ClientEvents -> ExtEvents [Ext.data.Store[store] ] add store.loa ...

  5. SRE网站可靠性工程师

    SRE网站可靠性工程师 SRE需要做什么? 一般: 故障模式,尤其是SPOF(单点故障).消除SPOFs是你作为SRE最大的挑战和乐趣. 基础设施组件,从应用程序到硬件(服务器.交换机.路由器.互联网 ...

  6. pdf和图片的处理一记

    python是非常好用的一门语言,因为它有很多别人封装好底层逻辑的库,我们只需要用简单的函数调用或者经过并不复杂的初始化过程即可.最近要投递简历,所以在处理简历的时候遇到一个问题,就是生成了一份pdf ...

  7. MySQL 中 INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别是什么?

    在MySQL中,INNER JOIN.LEFT JOIN和RIGHT JOIN是用于连接两个或多个表的操作符,它们的主要区别在于如何处理匹配的记录和不匹配的记录. INNER JOIN: 只返回两个表 ...

  8. UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe8 in position...解决方法

    运行python程序,出现了以下错误: File "C:/��͸/python ѧϰ/god_mellonѧϰpython/untitled2/fofa_py2.py", line ...

  9. 使用Ollama本地化部署DeepSeek

    1.Ollama 简介 Ollama 是一个开源的本地化大模型部署工具,旨在简化大型语言模型(LLM)的安装.运行和管理.它支持多种模型架构,并提供与 OpenAI 兼容的 API 接口,适合开发者和 ...

  10. 突破Excel百万数据导出瓶颈:全链路优化实战指南

    在日常工作中,Excel数据导出是一个常见的需求. 然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈. 当用户点击"导出"按钮时,后台系统往往会陷入三重困境: ‌内 ...