zoukankan      html  css  js  c++  java
  • 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测试服务,效果如下:

     

  • 相关阅读:
    java中的“指针”
    UEditor1.4.3.3编辑器漏洞
    csrf攻击实例
    shiro java 反序列漏洞复现
    渗透面试问题
    了解 OWASP TOP 10
    网络基础知识回顾
    cs(cobalt strike)的使用
    解决docker-valhub漏洞环境下载慢的问题
    Vulhub漏洞CVE-2017-10271复现
  • 原文地址:https://www.cnblogs.com/sapSB/p/14030789.html
Copyright © 2011-2022 走看看