SAP发布简易REST 三:API平台之接口文档
为了完善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平台之接口文档的更多相关文章
- 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(二)
传送门:从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一) 一.设置Swagger页面为首页--开发环境 我们虽然可以在输入 /swagger 后顺利的访问 ...
- Web API 自动生成接口文档
1.添加NuGet程序包 Microsoft ASP.NET Web API 2.2 Help Page (这是微软官方的) A Simple Test Client for ASP.NET ...
- 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一)
一.创建ASP.NET Core Web API项目(若项目已创建,则可跳过本节内容) 1.双击打开VS2022. 2.单击"创建新项目",如下图. 3.选择"ASP.N ...
- 使用swagger实现web api在线接口文档
一.前言 通常我们的项目会包含许多对外的接口,这些接口都需要文档化,标准的接口描述文档需要描述接口的地址.参数.返回值.备注等等:像我们以前的做法是写在word/excel,通常是按模块划分,例如一个 ...
- 研发团队如何写好API接口文档
导读 背景 痛点在哪? 为什么要写接口文档? API规范 接口工具 总结 背景 随着业务的发展,支撑组的项目也是越来越多.同时,从整个支撑组项目架构体系(含运维和运营体系),我们对系统业 ...
- 三 drf 认证,权限,限流,过滤,排序,分页,异常处理,接口文档,集xadmin的使用
因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py createsuperuser 创建管理员以后,访问admin站点 ...
- 使用swagger实现web api在线接口文档(转载)
一.前言 通常我们的项目会包含许多对外的接口,这些接口都需要文档化,标准的接口描述文档需要描述接口的地址.参数.返回值.备注等等:像我们以前的做法是写在word/excel,通常是按模块划分,例如一个 ...
- RESTful (俗称:api接口文档)
整体规范建议采用RESTful 方式来实施. 协议 API与用户的通信协议,总是使用HTTPs协议,确保交互数据的传输安全. 域名 应该尽量将API部署在专用域名之下.https://api.exam ...
- 【开源】.Net Api开放接口文档网站
开源地址:http://git.oschina.net/chejiangyi/ApiView 开源QQ群: .net 开源基础服务 238543768 ApiView .net api的接口文档查看 ...
- api(接口)文档管理工具
api(接口)文档管理工具 欢迎光临:博之阅API管理平台 ,做为一个app开发者,还没有用到api管理工具,你就OUT了 点击进入:程序员精华博客大全
随机推荐
- 什么是swagger,一篇带你入门
一.前言 在前后端分离开发的过程中,前端和后端需要进行api对接进行交互,就需要一个api规范文档,方便前后端的交互,但api文档不能根据代码的变化发生实时动态的改变,这样后端修改了接口,前端不能及时 ...
- Redis 原理 - List
List 数据结构 Redis 3.2 前,使用 压缩列表zipList 或 双向链表linkedList 当同时满足下面两个条件时,使用zipList存储数据 list保存的每个元素长度小于64字节 ...
- for循环的注意事项
1.注意事项! 实操 可以看见上图,当{}里的循环走完后,i还存在,但是a消失了,因此{}里的变量会在每一次循环结束后释放 . 这也是为什么之前我们打印a会出错的原因:a早就已经从内存中释放了,还怎么 ...
- 探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(下)
上两篇文章<探秘MySQL索引底层原理,解锁数据库优化的关键密码(上)>和<探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(中)>主要讲了MySQL索引的底层原理,且 ...
- sonarqube+gitlab+jenkins+maven集成搭建(三)
安装JENKINS 关闭防火墙[root@localhost ~]# systemctl stop firewalld[root@localhost ~]# systemctl disable fir ...
- CTF实验吧加了料的报错注入
实验吧地址 http://ctf5.shiyanbar.com/web/baocuo/index.php F12审查元素发现源码中的提示是这样一整句的查询 基本确定此题为一个SQL注入 /# = un ...
- Vue 3 双向绑定 API defineModel 解析
defineModel defineModel是 Vue 3.4 正式加入的 API 了.它可以简化组件间双向绑定的操作,在自定义表单类组件中非常有用. 以前的自定义双向绑定 defineModel可 ...
- Java 线程的同步与死锁
目录 1.线程的同步产生的原因 2.线程的同步处理操作 3.线程的死锁情况 排查死锁的方式: 请解释多个线程访问统一资源时需要考虑哪些情况?有可能带来哪些后果? 概念:Java同步和异步,阻塞和非阻塞 ...
- 从 UEFI 启动到双系统——记一次双系统 Linux 分区迁移
前言 我的台式电脑上,装了 Windows 和 Linux 双系统. 我有两块 1 TB 硬盘,就把它们叫作硬盘 0 和硬盘 1 吧.最开始的时候,硬盘 0 上装了 Windows 系统,而我的数据分 ...
- 移动端H5页面在不同Android和iOS设备上的兼容适配
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...