SAP发布简易REST 二:API平台之接口配置详解编程语言

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

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

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

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

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

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

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

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

好,开始干。。。

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

SAP发布简易REST 二:API平台之接口配置详解编程语言

二,创建实施类:沿用前面的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.

测试:

SAP发布简易REST 二:API平台之接口配置详解编程语言

 三,封装测试函数:

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.

四,测试:

SAP发布简易REST 二:API平台之接口配置详解编程语言

 SAP发布简易REST 二:API平台之接口配置详解编程语言

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18717.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论