SAP发布简易REST 二:API平台之接口配置

时间:2024-02-25 18:57:12

 

API接口平台设计:(全JSON格式)

做ABAP的都知道,一般接口的处理都是封装个函数来单独处理。那么这些函数能不能做成配置呢?又以什么形式的参数来传入传出呢?

ps:到目前为止,只是有点想法,所以现在以及后面的文章可能都是临时起意的,不好的地方看看就好,好的地方。。。你也不用给钱。

 

前面设计了用户验证的API,后来试了token,好像不行。所以要么以后要么就是接口验证,要么就是登陆验证。

下面说说设计想法:(思路初版,后续可能有更新的部分)

1.设置接口参数对应函数配置表:

2.在统御API中,获取URL参数,BODY参数,HEADER参数等,匹配1中的配置表

3.动态调用2中对应的函数,并处理返回参数。

 

好,开始干。。。

 

一,创建配置表,配置接口对应处理的函数:

 

 

二,创建实施类:沿用前面的ZCRM_REST类,修改处理方法。

  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,
          gw_api    TYPE zapi_control.

    FIELD-SYMBOLS: <fs_field>       LIKE LINE OF lt_fields.

    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
    SELECT SINGLE * INTO gw_api 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_api-zflag."used flag
        WHEN \'X\'.
*""GET HTTP MESSAGE BODY
          lv_data = server->request->if_http_entity~get_cdata( ).

          "call method
          CALL FUNCTION gw_api-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->set_cdata(
            EXPORTING
              data   = lv_retu    " Character data
          ).

  ENDMETHOD.

测试:

 三,封装测试函数:

FUNCTION zly01.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(INPUT) TYPE  STRING
*"  EXPORTING
*"     REFERENCE(OUTPUT) TYPE  STRING
*"----------------------------------------------------------------------
  TYPES:BEGIN OF ty_retu,
          success      TYPE string,
          access_token TYPE string,
          message      TYPE string,
        END OF ty_retu.

  DATA: gw_retu   TYPE ty_retu.

  gw_retu-success = \'S\'.
  gw_retu-message = \'PRO!\'.

  output = /ui2/cl_json=>serialize(
     data        = gw_retu
     pretty_name = \'L\'
     compress    = abap_true ).



ENDFUNCTION.

 

四,测试:

 

 

 

 

 

 

 这里把函数的参数限制死了,后面有时间的话可以用param table。。。先这样用着。