首页 > 其他分享 >ZCL_REST_CLIENT

ZCL_REST_CLIENT

时间:2023-05-18 23:15:26浏览次数:35  
标签:http ZCL sapecc REST height width CLIENT inventec method

Introduction

ZCL_REST_CLIENT

  • RESTful-API consumer enhancement - 自動記錄request/response

History

VersionDateNameDescription
V001 2020/10/14 Huang Roy 初版

Public Method

HANDLE_REQUEST

  • Interface: IF_HTTP_EXTENSION method
ParameterLevelPass ValueOptionalType(Ref To)DefaultDescription
I_ADDRESS Importing     AD_SMTPADR   E-Mail Address
I_TYPE Importing   X USC_Y_RECV_TYPE 'N' Recipient Type(N/C/B)

Parameter Level Val Opt Type(Ref To) Default Description


SERVER Importing IF_HTTP_SERVER HTTP Server

Protected Method

_HANDLE_REQUEST

實際修改程式碼的method

Parameter Level Val Opt Type(Ref To) Default Description


SERVER Importing IF_HTTP_SERVER HTTP Server

Sample

建立RESTful API Class

1.T-code: SE24,建立Global Class,這邊用YCL_REST做範例

Superclass設定ZCL_REST_SERVER,繼承method

{width="6.6658333333333335in" height="2.6871642607174104in"}

2.滑鼠游標定位在method: _HANDLE_REQUEST,並點擊{width="0.1978915135608049in" height="0.1874770341207349in"},Redefine

{width="6.28301946631671in" height="1.9061362642169728in"}

3.修改code,並Activate。

※1.取得**~request_method**,確定方法是GET/POST/PUT/DELETE...,這裡判斷**GET**才回傳值

※2.get_form_fields(),取得的參數名會自動轉小寫

※3.最後Response

※4.另外說明,如果需要有錯誤,就直接Raise Exception讓這個Service死就好了,不用Catch

+----------------------------------------------------------------------+ | * Process | | | |   DATA**: **l_method TYPE string**,** | | | |         lt_param TYPE tihttpnvp**,** | | | |         l_str TYPE string**.** | | | |   FIELD-SYMBOLS <lw_param> TYPE ihttpnvp**.** | | | | * Process | | | | ** Get ~request_method | | | |   l_method **= **server->re | | quest->get_header_field**( **name **= **'~request_method' **).** | | | |   CHECK l_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->respons | | e->set_content_type**( **'application/json; charset=utf-8' **).** | | | |     ENDCASE**.** | | | |     server->resp | | onse->set_status**( **code **= **'200' reason **= **'OK' **).** | | | |     server->response->set_cdata**( **l_str **).** | | | |   ENDIF**.** | +----------------------------------------------------------------------+

設定API路徑

1.T-code: SICF,執行

※在Windows AP上執行

{width="6.707494531933508in" height="4.572344706911636in"}

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

{width="2.905886920384952in" height="0.624922353455818in"}

{width="4.8848064304461944in" height="2.103904199475066in"}

3.Description 1必填,然後切到Handler List,將前面建立的Class填入

{width="6.53043416447944in" height="4.0619925634295715in"}

4.存檔後,記得啟用此Service

{width="2.2288877952755906in" height="2.0309962817147857in"}

5.Test Service

{width="2.312211286089239in" height="1.781026902887139in"}

6.自動開啟browser,輸入帳號密碼

{width="7.480555555555555in" height="2.2291666666666665in"}

7.因為程式碼中有用type來判斷回傳結果,所以改一下URL

http://eccqdap.sapecc.inventec:8010/sap/rest-test**?type=JSON**

{width="1.9789195100612424in" height="0.34370734908136485in"}

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

{width="0.9165518372703412in" height="0.22913823272090988in"}

Logs

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

{width="6.61375656167979in" height="1.489397419072616in"}

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

{width="0.6561679790026247in" height="0.6978291776027996in"}

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

{width="6.217972440944882in" height="0.1978915135608049in"}

※目前只能在Windows AP下存Log,所以用Unix AP會跳錯誤。

※不過目前IEC開放RESTful Server的host也只有Windows AP,所以根源上直接就解決這個問題

4.檔案內資訊

{width="7.480555555555555in" height="2.660416666666667in"}

Appendix

SMICM

T-code: SMICM,點擊{width="0.1981124234470691in" height="0.1981124234470691in"}進入services

{width="6.8533103674540685in" height="4.551514654418198in"}

檢視host name, port, & timeout limit(但只能查當下登入的AP server)

{width="7.480555555555555in" height="1.163888888888889in"}

※也可以使用FM: /SDF/GET_ICM_VIRT_HOST_DATA,有多AP server時使用較方便。

各環境HostName, Port

+------------+--------------------------------------+ | System | HostName + port | +============+======================================+ | 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,height,width,CLIENT,inventec,method
From: https://www.cnblogs.com/TYAING/p/17413564.html

相关文章

  • ZCL_REST_SERVER
    IntroductionHistoryPublicMethodIF_HTTP_EXTENSION~HANDLE_REQUESTProtectedMethod_HANDLE_REQUESTSample建立RESTful-APIClass設定API路徑LogsAppendixSMICM各環境HostName,PortIntroductionZCL_REST_SERVERRESTful-APIproviderenhanceme......
  • 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\),他们的站位位......
  • 使用sockjs-client 和 @stomp/stompjs 创建socket,断线重连机制
    importSockClientfrom'sockjs-client'constStomp=require('@stomp/stompjs')//方法createStompClient(){constthat=thisconstws=newSockClient(`/socket/api/socket-mq?access_token=${getToken()}`)this.stom......
  • Zclip:复制页面内容到剪贴板兼容各浏览器
    WEB开发中,要让用户复制页面中的一段代码、URL地址等信息,为了避免用户拖动鼠标再进行右键复制操作而可能出现的差错,我们可以直接在页面中放置一个复制按钮,只需要轻轻一点这个复制按钮,内容将会被复制,然后用户可以粘贴到想粘贴的地方。 本文将结合实例讲解如何使用一款基于jQuery的插......
  • .Net Grpc Client调用Java Grpc Server
    1.JavaGrpcServer参考地址:grpc-javaos-maven-pluginprotobuf-maven-plugin1.新建SpringBoot项目[略]2.POM引入相关依赖<dependencies><dependency><groupId>io.github.lognet</groupId><artifactId>grpc......
  • RESTFul API及幂等性
    RESTful是一种API设计风格,用于client和server之间的数据交互。它不是标准也不是协议,而是一组设计原则和约束条件。RESTful的主要原则有:使用HTTP方法:GET查询资源,POST创建资源,PUT更新资源,DELETE删除资源。资源(Resources)设计:将API结构化为可识别的资源,每个资源都有唯一的URL来......
  • OneFastClient客户端用SuperAdmin登录提示用户不存在?
    原因:服务器端没设超管密码解决办法:......
  • 【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Rest
    问题描述介绍了使用PythonSDK来获取AppService的访问限制信息,那么如何调用RESTAPI来实现呢? 问题解答如大家所知,Azure不管是SDK,门户UI,或者是PowerShell命令方式对Azure中资源进行操作,都是通过RESTAPI方式处理请求。所以,如果不知道当前操作使用的是一个接口时,最简单的方法是......
  • Django-rest-framework框架
    web应用模式、API接口、接口测试工具postman、如何在浏览器中测试、restful规范、序列化反序列化、基于Django原生编写五个接口、drf介绍和快速使用、drf之APIView源码分析......