首页 > 其他分享 >ZCL_REST_SERVER

ZCL_REST_SERVER

时间:2023-05-18 23:13:42浏览次数:51  
标签:HTTP ZCL sapecc REST SERVER test inventec method

Introduction

ZCL_REST_SERVER

  • RESTful-API provider enhancement - 自動記錄request/response
  • 啟用CORS(Access-Control-Allow-Origin: *),供swagger使用

History

VersionDateNameDescription
V001 2020/10/14 Huang Roy 初版
V002 2021/10/14 Huang Roy 啟用CORS

Public Method

IF_HTTP_EXTENSION~HANDLE_REQUEST

  • Interface: IF_HTTP_EXTENSION method
ParameterLevelPass ValueOptionalType(Ref To)DefaultDescription
SERVER Importing     IF_HTTP_SERVER   HTTP Server

Protected Method

_HANDLE_REQUEST

  • 繼承後,實際客製的method
ParameterLevelPass ValueOptionalType(Ref To)DefaultDescription
SERVER Importing     IF_HTTP_SERVER   HTTP Server

Sample

建立RESTful-API Class

  1. T-code: SE24,建立Global Class,這邊用YCL_REST_TEST做範例
    Superclass設定ZCL_REST_SERVER,save,繼承method()

  2. 游標定位在method: _HANDLE_REQUEST,並點擊,Redefine

  3. 修改code,並Activate

    • 取得 ~request_method,檢查方法(GET/POST/PUT/DELETE...),這裡判斷GET才回傳值
    • get_form_fields( ),取得的參數名會自動轉小寫
    • 最後response
    METHOD _handle_request.
    * Process
      DATA: lt_param TYPE tihttpnvp,
            l_str TYPE string.
      FIELD-SYMBOLS <lw_param> TYPE ihttpnvp.
    
    * Process
    ** ~request_method is 'GET'
      ASSERT server->request->get_method( ) = 'GET'.
    ** Get Parameter(all parameter name is lowercase)
      server->request->get_form_fields( CHANGING fields = lt_param ).
      READ TABLE lt_param ASSIGNING <lw_param>
        WITH KEY name = 'type'.
      IF sy-subrc = 0.
    ** Response
        CASE <lw_param>-value.
          WHEN 'TEXT'.
            l_str = 'TEXT test'.
            server->response->set_content_type( 'text/html; charset=utf-8' ).
          WHEN 'JSON'.
            l_str = '{"JSONValue":"JSON test"}'.
            server->response->set_content_type( 'application/json; charset=utf-8' ).
        ENDCASE.
        server->response->set_status( code = '200' reason = 'OK' ).
        server->response->set_cdata( l_str ).
      ENDIF.
    ENDMETHOD.
    

設定API路徑

  1. T-code: SICF,執行
    ※在Windows AP上執行

  2. 我們在default_host/sap/restful-test下,建立一個sub element,命名為restful-test

  3. Description 1必填,切換到Handler List,將前面建立的Class填入,存檔
    ※ logon data預設是用SAP帳密驗證(Basic Authentication)

  4. 啟用Service

  5. Test Service,會自動開啟browser,輸入SAP帳號密碼

  6. 因為程式碼中有用參數來判斷回傳結果,所以加上參數獲得結果
    http://eccqdap.sapecc.inventec:8010/sap/restful-test?type=JSON

    {
        "JSONValue": "JSON test"
    }
    

    http://eccqdap.sapecc.inventec:8010/sap/restful-test?type=TEXT

    TEXT test
    

Logs

  1. 路徑設定於Table: ZTCFG_TOOLS,MAIN=ZCL_REST_SERVER,SUB1=LOG_BASEPATH

  2. 以資料夾(資料夾不存在會自動建立)區分環境及程式log

  3. log檔名為<ClassName>_<date>

    ※目前只能在Windows AP下存Log,所以用Unix AP會跳錯誤。
    ※不過目前IEC開放RESTful-API Server的host也只有Windows AP,所以根源上直接就解決這個問題

  4. 檔案內資訊

Appendix

SMICM

T-code: SMICM,點擊,可檢視該AP相關service info
※可以使用FM: /SDF/GET_ICM_VIRT_HOST_DATA or TH_SERVER_LIST,一次查詢所有AP host

※從menu→service→change可以修改該service參數

各環境HostName, Port

SystemHost
DEV http://eccqdap.sapecc.inventec:8010
https://eccqdap.sapecc.inventec:5210
QAS http://eccqdap.sapecc.inventec:8000
PRD http://eccap1.sapecc.inventec:8000
http://eccap1.sapecc.inventec:8001
http://eccap2.sapecc.inventec:8000
http://eccap2.sapecc.inventec:8001
http://eccap3.sapecc.inventec:8000
http://eccap3.sapecc.inventec:8001
http://eccap4.sapecc.inventec:8000
http://eccap4.sapecc.inventec:8001

标签:HTTP,ZCL,sapecc,REST,SERVER,test,inventec,method
From: https://www.cnblogs.com/TYAING/p/17413572.html

相关文章

  • ZCL_REST_SYSTEM_MONITOR
    IntroductionHistorySwaggerIntroductionClass:ZCL_REST_SYSTEM_MONITOR利用zcl_tools=>get_system_monitor(),給外部取得SAP系統狀況HistoryVersionDateNameDescriptionV0012021/10/13HuangRoy初版SwaggerItemURLSwaggerUIhttp://tao-misdb......
  • [ABC268C] Chinese Restaurant
    [ABC268C]ChineseRestaurant声明:以下的所有操作都会再做一次\(\%n+n)\%n\),比如\(i-1\)会变成\(((i-1)\%n+n)\%n\)题意有\(n\)个人和\(n\)个盘子,每个人如果能拿到\(i-1\)或\(i\)或\(i+1\)号盘子那么他会很开心,现在每个人的站位是\(p_i\),他们的站位位......
  • MS SQL Server 排查阻塞和查找被锁语句
    --方法1SELECT'资源类型'=t1.resource_type,'来源数据库'=CONVERT(CHAR(25),DB_NAME(resource_database_id)),'数据库中与资源相关联的实体的ID'=t1.resource_associated_entity_id,'锁模式'=t1.request_mode, --锁的模式:S-共享锁,U-更新锁,X-排他锁,IS/IU/IX-意向......
  • 泛微CheckServer.jsp注入
    /mobile/plugin/CheckServer.jsp通过urldecode可以绕过泛微waf......
  • 什么是 Angular 应用的 browser Application bundles 和 server Application bundle
    我们在使用yarnrun启动Angular应用时,注意到browserApplication和serverApplicationbundle的生成:在Angular应用程序中,应用程序包含两个主要的部分:客户端应用程序和服务器应用程序。客户端应用程序是在Web浏览器中运行的Angular应用程序,而服务器应用程序是在服......
  • ASP.NET Core Swagger接入使用IdentityServer4 的 WebApi
    写在前面是这样的,我们现在接口使用了Ocelot做网关,Ocelot里面集成了基于IdentityServer4的开发的授权中心用于对Api资源的保护。问题来了,我们的Api用了SwaggerUI做接口的自文档,那就蛋疼了,你接入了IdentityServer4的Api,用SwaggerUI调试、调用接口的话,妥妥的401,未授权啊。那有小伙伴就......
  • Zclip:复制页面内容到剪贴板兼容各浏览器
    WEB开发中,要让用户复制页面中的一段代码、URL地址等信息,为了避免用户拖动鼠标再进行右键复制操作而可能出现的差错,我们可以直接在页面中放置一个复制按钮,只需要轻轻一点这个复制按钮,内容将会被复制,然后用户可以粘贴到想粘贴的地方。 本文将结合实例讲解如何使用一款基于jQuery的插......
  • Ubuntu Desktop 变为 Ubuntu Server 服务器版的方法
    去Ubuntu官网看到有好几种版本可以下载,alternate(文本安装)、desktop9(桌面)、netbook(上网本)、server(服务器)。使用server版某个理由:32位的系统可以使用4G以上的内存,最多能到64G。前提是主板能够支持特别提示。32位系统,打开内存得映射功能后,系统将不能使用休眠功能(休眠与待机不同)驱动......
  • linux-安装系统Ubuntu Server 14.04,16.04和17.10
    安装系统UbuntuServer14.04,16.04和17.10 本文以14.04位案例进行安装,其他版本相关问题会做注解1.选择要安装的系统语言本界面建议选择English,之后再选择中文安装对于14.x版本选择中文没有问题,但是对于16.04和17.10版本,该步骤选择中文后面会报错:2.选择安装过程中需要的语......
  • CentOS下安装vncserver进行远程桌面控制
    CentOS下安装vncserver进行远程桌面控制yumgroupinstall-y"XWindowSystem""Desktop""ChineseSupport"yumgroupinstall-y"DesktopPlatform""DesktopPlatformDevelopment""Fonts""InternetBrowser&q......