SICF + IF_HTTP_EXTENSION 自定义 JSON REST 接口

步骤 1:SE24 创建处理类(100% 可激活)

  1. 事务码 SE24,输入类名 ZCL_HTTP_RFC_SRV,点击「创建」
  2. 类属性设置:公共类、最终类、实例化方式为「公共」,保存
  3. 切换到「接口」标签页,输入 IF_HTTP_EXTENSION 回车,保存
  4. 切换到「方法」标签页,双击 IF_HTTP_EXTENSION~HANDLE_REQUEST 进入方法实现编辑器
  5. 仅在方法内部粘贴以下代码(类定义、实现外壳由系统自动生成,不要手动粘贴)

abap

DATA: lo_req   TYPE REF TO if_http_request,
      lo_rsp   TYPE REF TO if_http_response,
      lv_body  TYPE string,
      iv_aufnr TYPE aufnr,
      lt_out   TYPE TABLE OF zrfc_get_aufnr_a_out,
      lv_json  TYPE string.

" 获取请求/响应对象(属性调用,不加括号)
lo_req = server->request.
lo_rsp = server->response.

" 读取POST请求体
lv_body = lo_req->get_cdata( ).
IF lv_body IS INITIAL.
  lv_json = '{"code":400,"msg":"请求体不能为空"}'.
  lo_rsp->set_status( code = 400 reason = 'Bad Request' ).
ELSE.
  " JSON反序列化入参
  /ui2/cl_json=>deserialize(
    EXPORTING
      json = lv_body
    CHANGING
      data = iv_aufnr
  ).

  " 调用业务RFC
  CALL FUNCTION 'ZRFC_GET_AUFNR_A'
    EXPORTING
      i_aufnr = iv_aufnr
    TABLES
      ot_out  = lt_out.

  " 结果序列化为JSON
  /ui2/cl_json=>serialize(
    EXPORTING
      data = lt_out
    RECEIVING
      r_json = lv_json
  ).
  lo_rsp->set_status( code = 200 reason = 'OK' ).
ENDIF.

" 设置响应头与返回内容
lo_rsp->set_content_type( content_type = 'application/json;charset=utf-8' ).
lo_rsp->set_cdata( data = lv_json ).
lo_rsp->set_header_field( name = 'Access-Control-Allow-Origin' value = '*' ).
  1. 保存方法,返回类主界面,点击「激活」,无语法错误。

步骤 2:SICF 发布 HTTP 服务

  1. 事务码 SICF,执行后展开 default_host 节点
  2. 选择你要放置的路径(如 default_host/sap/zapi),右键「新建子元素」
  3. 服务名称输入 zrfc_aufnr,类型选择「独立服务」,描述自定义,保存
  4. 切换到「处理器列表」标签页,处理器类填入 ZCL_HTTP_RFC_SRV
  5. 切换到「登录数据」标签页:
    • 测试环境可勾选「无需登录」,填入有权限的系统用户和密码
    • 生产环境建议配置基础认证或 SSO
  6. 右键该服务节点,点击「激活服务」

步骤 3:接口测试

  • 请求地址:http://<系统域名>:<端口>/sap/zapi/zrfc_aufnr
  • 请求方式:POST
  • 请求头:Content-Type: application/json
  • 请求体示例:

json

"0000123456"
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andrew.Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值