title: ABAP 创建一个简单的 RESTful 接口description: 实现 IF_HTTP_EXTENSION 接口即可
redirect: 2021-01-25-abap-rest-interface

description: 实现 IF_HTTP_EXTENSION 接口即可

创建一个实现 IF_HTTP_EXTENSION 接口的类

TCODE: SE24

实现代码

  1. " ZCL_HTTP_RESTFUL_TEST
  2. CLASS zcl_http_restful_test DEFINITION
  3. PUBLIC
  4. FINAL
  5. CREATE PUBLIC .
  6. PUBLIC SECTION.
  7. INTERFACES if_http_extension .
  8. PROTECTED SECTION.
  9. PRIVATE SECTION.
  10. ENDCLASS.
  11. CLASS ZCL_HTTP_RESTFUL_TEST IMPLEMENTATION.
  12. * <SIGNATURE>---------------------------------------------------------------------------------------+
  13. * | Instance Public Method ZCL_HTTP_RESTFUL_TEST->IF_HTTP_EXTENSION~HANDLE_REQUEST
  14. * +-------------------------------------------------------------------------------------------------+
  15. * | [--->] SERVER TYPE REF TO IF_HTTP_SERVER
  16. * +--------------------------------------------------------------------------------------</SIGNATURE>
  17. METHOD if_http_extension~handle_request.
  18. DATA lv_json_string TYPE vbi_json.
  19. DATA lt_data TYPE STANDARD TABLE OF zmdg006.
  20. DATA ls_data TYPE zmdg006.
  21. DATA lv_data TYPE string.
  22. DATA lt_fields TYPE tihttpnvp.
  23. lv_data = server->request->if_http_entity~get_cdata( ).
  24. " 获取 query
  25. server->request->if_http_entity~get_form_fields(
  26. CHANGING fields = lt_fields
  27. ).
  28. CASE server->request->get_header_field( name = '~request_method' ).
  29. WHEN `GET` OR `POST`.
  30. SELECT *
  31. FROM zmdg006
  32. INTO TABLE @lt_data
  33. UP TO 20 ROWS.
  34. lv_json_string = /ui2/cl_json=>serialize(
  35. data = lt_data
  36. compress = abap_true
  37. pretty_name = /ui2/cl_json=>pretty_mode-camel_case
  38. numc_as_string = abap_false
  39. ).
  40. server->response->set_cdata(
  41. EXPORTING
  42. data = lv_json_string
  43. ).
  44. server->response->set_status(
  45. code = 200
  46. reason = `OK`
  47. ).
  48. ENDCASE.
  49. server->response->if_http_entity~set_content_type(
  50. EXPORTING
  51. content_type = 'application/json'
  52. ).
  53. ENDMETHOD.
  54. ENDCLASS.

TCODE: SICF
配置处理器清单
测试

References

  • https://blogs.sap.com/2013/09/16/creation-of-restful-webservice-in-sap/
  • API
  • APPEND_FIELD_URL 将名称/值对添加到URL的查询字符串中
  • DECODE_BASE64 解码一个BASE64编码的字符串
  • ENCODE_BASE64 BASE64对给定的字符串进行编码
  • ESCAPE_HTML HTML对给定的字符串进行编码,替换掉例如<’与’<’
  • ESCAPE_URL URL对给定的字符串进行编码,例如:用%20代替Space
  • GET_EXTENSION_INFO 返回请求处理程序的协议、主机、端口和URL
  • GET_EXTENSION_URL 返回请求处理程序的协议、主机、端口和URL
  • UNESCAPE_URL URL对给定的字符串进行解码
  • GET_LOCATION 为客户域内的WebAS提供主机、端口
  • GET_LOCATION_EXCEPTION 从异常表中只返回主机和端口
  • SET_SESSION_STATEFUL 激活/停用有状态的会话
  • SET_SESSION_STATEFUL_VIA_URL 通过URL重写激活/停用有状态的会话
  • CREATE_ABS_URL 创建绝对网址
  • CREATE_REL_URL 创建相对的URL
  • GET_LAST_ERROR 返回最后一次方法调用的返回代码
  • SET_COMPRESSION 激活/停用压缩
  • SEND_PAGE 发送最后一页
  • SET_PAGE 设置错误页面
  • LOGOFF 登出
  • ENABLE_FOREIGN_SESSION_ACCESS 其他HTTP客户端访问有状态会话
  • GET_XSRF_TOKEN 提供跨站点请求伪造(XSRF)令牌
  • VALIDATE_XSRF_TOKEN 跨站请求伪造(XSRF)令牌的验证
  • GET_UCON_RUNTIME 接收统一连接的运行时接口
  • GET_ICF_RUNTIME 接收经典ICF Runtime的运行时接口