为了完善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实战项目-学习任务系统-任务管理

    接着上期代码框架,开发第3个功能,任务管理,再增加一个学习任务表,用来记录发布的学习任务的标题和内容,预计完成天数,奖励积分和任务状态等信息. 第一步:编写第三个功能-任务管理 1,编辑模型文件: . ...

  2. vue学习一(指令1.v-text,v-html,插值表达式{{msg}})

    一.1.v-text,v-html,插值表达式{{msg}} 注:v-text解决差值表达式闪烁问题,因为他是属性不是差值表达式 1.1.v-text: 是没有闪烁问题的,会覆盖标签的元素中原本的内容 ...

  3. 使用Win32控制台实现libevent通信

    libevent版本:libevent-2.0.22-stable 服务端: #include <string.h> #include <errno.h> #include & ...

  4. PIO----创建Excel表格复杂使用

    导出 @RequestMapping( name = "下载模板附件实现Model", value = {"/uploadFileModel"}, method ...

  5. 保存深度值——小端序,位数,Android,Huawei AR engine

    保存深度值--小端序,位数,Android accuireDepthImage 华为Mate Pro系列基本上前置摄像头都是有TOF的,也就是能够得到场景的深度信息,在华为的AR engine里提供了 ...

  6. 【SpringCloud】各种组件的更新情况

    关于Cloud各种组件的停更/升级/替换 由停更引发的"升级惨案" 停更不停用 被动修复bugs 不再接受合并请求 不再发布新版本 以前 now2020 服务注册中心 Eureka ...

  7. ZKmall开源商城iOS 与安卓双端开发:如何平衡 B2B2C 商城的代码复用与性能

    在ZKmall开源商城的iOS与安卓双端开发中,平衡B2B2C商城的代码复用与性能是一个关键考量.以下是一些建议和实践方法,以实现这一目标: 一.架构分层设计:解耦与复用 1. 分层架构模型 merm ...

  8. 记录-内网部署vllm分布式推理DeepSeekR1:70b

    背景 前段时间接到需求要在内网部署DeepSeekR1:70b,由于手里的服务器和显卡比较差(四台 四块Tesla T4- 16g显存的服务器),先后尝试了ollama.vllm.llamacpp等, ...

  9. idea远程访问docker查看控制台中文乱码问题

    今天心血来潮想把自己的项目部署到docker,部署完成后通过idea远程访问docker.发现控制台日志出现中文乱码,起初还以为docker或者项目编码没有设置好,一一排查后发现服务器编码和环境都没有 ...

  10. CSP - J理论(2)

    CSP - J理论(2) CSP-J理论合集跳转 目录 本目录中所有标题单击均可以快速跳转哦