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。。。先这样用着。

  • 相关阅读:
    mongo
    CSS常用属性
    nginx-proxy_cache缓存
    nginx防盗链
    oracle11g-centos部署
    VLAN高级特性
    路由
    网络摄像头分辨率
    前端开发调试线上代码的两款工具
    sql中 in , not in , exists , not exists效率分析
  • 原文地址:https://www.cnblogs.com/sapSB/p/13665819.html
Copyright © 2011-2022 走看看