SAP發布簡易REST 二:API平台之接口配置


 

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。。。先這樣用着。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM