Introduction
ZCL_REST_SERVER
- RESTful-API provider enhancement - 自動記錄request/response
- 啟用CORS(Access-Control-Allow-Origin: *),供swagger使用
History
Version | Date | Name | Description |
---|---|---|---|
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
Parameter | Level | Pass Value | Optional | Type(Ref To) | Default | Description |
---|---|---|---|---|---|---|
SERVER | Importing | IF_HTTP_SERVER | HTTP Server |
Protected Method
_HANDLE_REQUEST
- 繼承後,實際客製的method
Parameter | Level | Pass Value | Optional | Type(Ref To) | Default | Description |
---|---|---|---|---|---|---|
SERVER | Importing | IF_HTTP_SERVER | HTTP Server |
Sample
建立RESTful-API Class
-
T-code: SE24,建立Global Class,這邊用YCL_REST_TEST做範例
Superclass設定ZCL_REST_SERVER,save,繼承method() -
修改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路徑
-
我們在default_host/sap/restful-test下,建立一個sub element,命名為restful-test
-
Description 1必填,切換到Handler List,將前面建立的Class填入,存檔
※ logon data預設是用SAP帳密驗證(Basic Authentication) -
因為程式碼中有用參數來判斷回傳結果,所以加上參數獲得結果
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
-
路徑設定於Table: ZTCFG_TOOLS,MAIN=ZCL_REST_SERVER,SUB1=LOG_BASEPATH
-
log檔名為<ClassName>_<date>
※目前只能在Windows AP下存Log,所以用Unix AP會跳錯誤。
※不過目前IEC開放RESTful-API Server的host也只有Windows AP,所以根源上直接就解決這個問題
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參數