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测试服务,效果如下:

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM