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

     

  • 相关阅读:
    C#中 @ 的用法
    ASP.NET页面间传值
    ASP.NET中常用的文件上传下载方法
    把图片转换为字符
    把图片转换为字符
    JavaScript 时间延迟
    Using WSDLs in UCM 11g like you did in 10g
    The Definitive Guide to Stellent Content Server Development
    解决RedHat AS5 RPM安装包依赖问题
    在64位Windows 7上安装Oracle UCM 10gR3
  • 原文地址:https://www.cnblogs.com/sapSB/p/14030789.html
Copyright © 2011-2022 走看看