zoukankan      html  css  js  c++  java
  • 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。。。先这样用着。

  • 相关阅读:
    leetcode 78. 子集 JAVA
    leetcode 91. 解码方法 JAVA
    leetcode 75. 颜色分类 JAVA
    leetcode 74 搜索二维矩阵 java
    leetcode 84. 柱状图中最大的矩形 JAVA
    last occurance
    first occurance
    classical binary search
    LC.234.Palindrome Linked List
    LC.142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/sapSB/p/13665819.html
Copyright © 2011-2022 走看看