江苏城乡建设厅网站,百度云 wordpress 教程视频,wordpress主题制作器,友情链接软件最近在工作中需要发布 http 接口#xff0c;以供第三方系统调用#xff0c;所以有了本博客#xff0c;用来记录开发过程 网上有很多实现的方式都是通过 IF_HTTP_EXTENSION 接口实现的#xff0c;这次用的方式不一样。 具体过程如下#xff1a; 一、代码过程使用SE24创建…最近在工作中需要发布 http 接口以供第三方系统调用所以有了本博客用来记录开发过程网上有很多实现的方式都是通过IF_HTTP_EXTENSION接口实现的这次用的方式不一样。具体过程如下一、代码过程使用SE24创建一个类ZLOCAL_CL_REST并且继承超类CL_REST_HTTP_HANDLER。重构方法IF_REST_APPLICATION~GET_ROOT_HANDLERHANDLE_CSRF_TOKEN其中HANDLE_CSRF_TOKEN 是用于token验证的如果不需要token验证则直接重构即可不需要代码需要验证的话可以保留无需重构。重构的代码其中/GET/PO 为接口路径ZLOCAL_CL_GET_PURCHASEORDER 为接口类TOKEN 验证如果需要进行验证的则不需要重构方法HANDLE_CSRF_TOKEN在原有的代码逻辑下使用GET 方法时在发送请求时登入了 Authentication账号密码即可正确获取token。不需要token则直接重构即可不需要代码。上述完成后再次使用SE24 创建一个类类名为前面的接口类ZLOCAL_CL_GET_PURCHASEORDER.并且继承超类CL_REST_RESOURCE。继承后根据接口的不同调用方式重构相应的方法这里使用GET方式进行演示METHOD if_rest_resource~get. *CALL METHOD SUPER-IF_REST_RESOURCE~GET *.DATA: lv_output_json TYPE string. DATA: lv_ebeln TYPE ebeln. DATA: BEGIN OF ls_out, ebeln TYPE ebeln, bukrs TYPE bukrs, bsart TYPE bsart, aedat TYPE aedat, ernam TYPE ernam, lifnr TYPE lifnr, ekorg TYPE ekorg, END OF ls_out. DATA: BEGIN OF ls_output, code TYPE char3, clnt TYPE sy-mandt, status TYPE char10, content TYPE string, data LIKE ls_out, END OF ls_output. DATA(rt_parameters)mo_request-get_uri_query_parameters(). 获取参数 LOOP AT rt_parameters ASSIGNING FIELD-SYMBOL(fs_par). TRANSLATEfs_par-name TO UPPER CASE. TRANSLATEfs_par-value TO UPPER CASE. ENDLOOP. ls_output-clntsy-mandt. READ TABLE rt_parameters INTO DATA(ls_par)WITH KEY nameEBELN.IF sy-subrc IS INITIAL AND ls_par-value IS NOT INITIAL. CALL FUNCTIONCONVERSION_EXIT_ALPHA_INPUTEXPORTING inputls_par-value IMPORTING outputlv_ebeln. SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_out FROM ekko WHERE ebelnlv_ebeln. IF sy-subrc IS INITIAL. ls_output-datals_out. ls_output-codecl_rest_status_codegc_success_ok. ls_output-statussuccess.ls_output-content获取成功.ELSE. ls_output-datals_out. ls_output-codecl_rest_status_codegc_success_ok. ls_output-statusfail.ls_output-content获取失败.ENDIF. ELSE. ls_output-datals_out. ls_output-codecl_rest_status_codegc_redirection_permanent. ls_output-statusfail.ls_output-content参数错误.ENDIF. /ui2/cl_jsonserialize(EXPORTING datals_output compressabap_false pretty_name/ui2/cl_jsonpretty_mode-camel_case RECEIVING r_jsonlv_output_json). 响应内容mo_response-create_entity()-set_string_data(lv_output_json). 响应内容类型 application/jsonmo_response-create_entity()-set_content_type(iv_media_typeif_rest_media_typegc_appl_json). 响应状态 非必须mo_response-set_status(cl_rest_status_codegc_success_ok). 响应说明 非必须mo_response-set_reason(cl_rest_status_codeget_reason_phrase(cl_rest_status_codegc_success_ok)). ENDMETHOD.POST方式获取body. POST 方式传入参数JSONDATA(lv_input_json)io_entity-get_string_data().二、使用SICF配置服务配置如下处理器为ZLOCAL_CL_REST,即第一次创建的类。三、Postman 测试1、正确调用2、如果路径不正确会提示没有合适的资源。3、方法没启用提示不受支持。四、使用token使用token 需要在 POST 方式调用先对类ZLOCAL_CL_GET_PURCHASEORDER中的方法IF_REST_RESOURCE~POST重构为了测试这里简单重构了。METHOD if_rest_resource~post. TYPES:BEGIN OF ts_indata , matnr TYPE matnr, maktx TYPE maktx, END OF ts_indata. DATA: ls_data TYPE ts_indata. TYPES: BEGIN OF ts_outdata, code TYPE char3. INCLUDE TYPE ts_indata. TYPES: END OF ts_outdata. DATA: ls_outdata TYPE ts_outdata. POST 方式传入参数JSONDATA(lv_input_json)io_entity-get_string_data(). JSON 转换为内表/ui2/cl_jsondeserialize(EXPORTING jsonlv_input_json CHANGING datals_data). CALL FUNCTIONCONVERSION_EXIT_MATN1_INPUTEXPORTING inputls_data-matnr IMPORTING outputls_data-matnr EXCEPTIONS length_error1OTHERS2. SELECT SINGLE maktx FROM makt INTO ls_data-maktx WHERE matnrls_data-matnr. 内表转换JSONDATA: lv_output_json TYPE string. MOVE-CORRESPONDING ls_data TO ls_outdata. ls_outdata-codecl_rest_status_codegc_success_ok./ui2/cl_jsonserialize(EXPORTING datals_outdata compressabap_false pretty_name/ui2/cl_jsonpretty_mode-camel_case RECEIVING r_jsonlv_output_json). 响应内容mo_response-create_entity()-set_string_data(lv_output_json). 响应状态 非必须mo_response-set_status(cl_rest_status_codegc_success_ok). 响应说明 非必须mo_response-set_reason(cl_rest_status_codeget_reason_phrase(cl_rest_status_codegc_success_ok)). ENDMETHOD.对请求添加Basic Authentication账号密码否则无法获取。使用Postman 获取token请求的Headers 中添加 x-csrf-token 参数值为 fetch即可在响应的 Headers 中取得 token 值。测试token1、使用错误的token会提示验证失败2、正确的token,验证时同样需要Basic Authentication账号密码。