SAP 直接发布 SICF REST JSON 接口

本文档介绍了如何使用SICF事务创建REST服务,涉及SAP的ICM和ICF组件。这个过程包括创建结构和表类型、定义ZIF_REST接口、编写处理GET和POST请求的类,以及在SICF中配置服务节点并进行测试。示例代码展示了如何处理HTTP请求和响应,特别是POST请求的数据处理和返回JSON响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍
此博客将指导您完成创建 SICF 服务 (REST) 的过程。SICF 是一个 SAP 事务,用于使用 Internet Communication Manager (ICM) 和 Internet Communication Framework (ICF) 来维护 HTTP 通信服务。这在多种情况下都很有用。例如:某个系统可能没有正确的网关安装或配置来在其中创建服务。

将采取以下步骤来创建和测试此类服务:

  1. 创建结构和表类型
  2. 创建ZIF_REST接口。
  3. 创建处理程序类
  4. 为 GET 请求创建类
  5. 为 POST 请求创建类
  6. 在事务 SICF 中创建节点
  7. 测试 GET 方法
  8. 测试 POST 方法
METHOD if_http_extension~handle_request.

    DATA: lw_fields TYPE ihttpnvp,
          lt_fields TYPE tihttpnvp.

    DATA: lv_reqstr  TYPE string,
          lv_reqxstr TYPE xstring,
          lv_resstr  TYPE string,
          lv_errstr  TYPE string.

    DATA: lv_tflag  TYPE string,
          lv_trcode TYPE string.

    DATA: lv_str1 TYPE string.

    DATA: lv_mtype TYPE comsgty,
          lv_msg   TYPE bapi_msg.

    DATA: ev_resp_xstring TYPE xstring.

    DATA: lv_codepage TYPE string.

    DATA: lv_dest    TYPE rfcdest,
          lv_url     TYPE string,
          lv_ctype   TYPE string,
          lv_request TYPE string.

    DATA: lv_response TYPE string,
          lt_headers  TYPE tihttpnvp.


    DATA: lv_filename TYPE string.

    DATA: lv_reportidlist TYPE string.

    CALL METHOD server->request->get_header_fields
      CHANGING
        fields = lt_fields.

    CALL METHOD server->request->if_http_entity~get_data
      RECEIVING
        data = lv_reqxstr.

    CALL METHOD server->request->if_http_entity~get_cdata
      RECEIVING
        data = lv_reqstr.

    REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf   IN lv_reqstr WITH ''.
    REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN lv_reqstr WITH ''.

    CLEAR: lw_fields.
    LOOP AT lt_fields INTO lw_fields WHERE name = '~request_method' AND value = 'POST'.
    ENDLOOP.
    IF lw_fields IS INITIAL.
      lv_response = '{"ERRORTEXT":"本接口仅支持 POST 调用"}'."<ERRORTEXT>本接口仅支持 POST 调用</ERRORTEXT>
    ELSE.

      CALL FUNCTION 'ZFM_YQT001'
        EXPORTING
          reqstr = lv_reqstr
        IMPORTING
          resstr = lv_response.

      IF lv_response IS INITIAL.
        lv_response = '{"pageNum":0,"pageSize":0,"total":0,"pages":0,"list":[{"corpId":0}]}'.
      ENDIF.
    ENDIF.

    CALL METHOD server->response->if_http_entity~set_content_type
      EXPORTING
        content_type = 'application/json; charset=utf-8'. "application/json; charset=utf-8   text/xml; charset=utf-8

    CALL METHOD server->response->if_http_entity~set_cdata
      EXPORTING
        data   = lv_response
        offset = 0
        length = -1.

  ENDMETHOD.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值