ABAP自建RESTFUL服务接口逻辑

继承接口:IF_HTTP_EXTENSION,使用SICF创建服务

 



METHOD
if_http_extension~handle_request. DATA: path_info TYPE string, p_info_tab TYPE TABLE OF string, action TYPE string, l_xt TYPE zifid, funcname TYPE rs38l_fnam, request_method TYPE string, lt_nvp TYPE tihttpnvp. FIELD-SYMBOLS <ls_nvp> TYPE ihttpnvp. DATA: i_json TYPE string, o_json TYPE string, l_num TYPE string, l_size TYPE string, l_ifid TYPE zifid. DATA: lcx_error TYPE REF TO cx_root. DATA: err_text TYPE c LENGTH 1000. me->my_service = server->request->get_header_field( name = '~script_name' ). action = server->request->get_form_field( 'action' ). request_method = server->request->get_header_field( name = '~request_method' ). IF my_service = '/sap_json' AND request_method = 'POST'. path_info = server->request->get_header_field( name = '~path_info' ). SPLIT path_info AT '/' INTO TABLE p_info_tab. ***20230721 优化 系统接口访问权限 READ TABLE p_info_tab INDEX 2 INTO l_xt."系统标识 READ TABLE p_info_tab INDEX 3 INTO funcname."接口 IF funcname IS INITIAL. CLEAR l_xt. READ TABLE p_info_tab INDEX 2 INTO funcname."原接口保持不变 ENDIF. **** TRANSLATE l_xt TO UPPER CASE. TRANSLATE funcname TO UPPER CASE. IF funcname IS INITIAL AND action IS INITIAL. o_json = `{"error_code": "404","error_message": "Not Found Empty request."}`. ELSEIF funcname = 'Z_SRM_MARC_IN'. l_ifid = funcname. SELECT 'X' INTO @DATA(l_x) UP TO 1 ROWS FROM zjson_log WHERE ifid = @l_ifid AND ifxt = @l_xt AND ifflag = ''. ENDSELECT. IF sy-subrc = 0. CLEAR: l_num ,l_size. server->request->get_form_fields_cs( CHANGING fields = lt_nvp )."PARAMETERS LOOP AT lt_nvp ASSIGNING <ls_nvp>. TRANSLATE <ls_nvp>-name TO UPPER CASE. " ABAP is upper case internally anyway. IF <ls_nvp>-name = 'PAGENUM'. l_num = <ls_nvp>-value. ENDIF. IF <ls_nvp>-name = 'PAGESIZE'. l_size = <ls_nvp>-value. ENDIF. ENDLOOP. i_json = server->request->get_cdata( )."BODY CALL FUNCTION funcname EXPORTING i_json = i_json pagenum = l_num pagesize = l_size IMPORTING o_json = o_json. ELSE. o_json = 'Zjson_log Normal Service'. ENDIF. ELSE. l_ifid = funcname. SELECT 'X' INTO @DATA(l_y) UP TO 1 ROWS FROM zjson_log WHERE ifid = @l_ifid AND ifxt = @l_xt AND ifflag = ''. ENDSELECT. IF sy-subrc = 0. i_json = server->request->get_cdata( ). TRY . CALL FUNCTION funcname EXPORTING i_json = i_json IMPORTING o_json = o_json. CATCH cx_root INTO lcx_error. err_text = lcx_error->get_text( ). " 获取错误消息 o_json = `{"error_code": "404","error_message": "FSSC."}`. REPLACE ALL OCCURRENCES OF 'FSSC' IN o_json WITH err_text. ENDTRY. ELSE. o_json = `{"error_code": "404","error_message": "Zjson_log Normal Service."}`. ENDIF. ENDIF. ELSE. o_json = `{"error_code": "404","error_message": "Not Found Service."}`. IF request_method NE 'POST'. o_json = `{"error_code": "404","error_message": "Method not allowed Method not allowed."}`. ENDIF. ENDIF. *------设置返回数据 server->response->set_cdata( EXPORTING data = o_json ). FREE:l_x,l_y,l_ifid,l_xt. ENDMETHOD.

 

posted @ 2024-12-18 09:02  東東東東  阅读(192)  评论(0)    收藏  举报