【SAP】SAP 发布HTTP接口之完整的Restful 含( 含Token 验证)

这篇具有很好参考价值的文章主要介绍了【SAP】SAP 发布HTTP接口之完整的Restful 含( 含Token 验证)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在工作中需要发布 http 接口,以供第三方系统调用,所以有了本博客,用来记录开发过程
网上有很多实现的方式都是通过 IF_HTTP_EXTENSION 接口实现的,这次用的方式不一样。
具体过程如下:

一、代码过程

  1. 使用SE24创建一个类 ZLOCAL_CL_REST,并且继承超类 CL_REST_HTTP_HANDLERabap 生成token服务,SAP,HTTP,其他,开发语言,restful
  2. 重构方法 IF_REST_APPLICATION~GET_ROOT_HANDLERHANDLE_CSRF_TOKEN,其中HANDLE_CSRF_TOKEN 是用于token验证的,如果不需要token验证则直接重构即可,不需要代码,需要验证的话可以将验证的逻辑写在该方法下。
    abap 生成token服务,SAP,HTTP,其他,开发语言,restful
  3. 重构的代码,其中/GET/PO 为接口路径,ZLOCAL_CL_GET_PURCHASEORDER 为接口类
    abap 生成token服务,SAP,HTTP,其他,开发语言,restful
  4. TOKEN 验证,如果需要验证的,可以重构方法:HANDLE_CSRF_TOKEN,在原有的代码逻辑下,使用GET 方法时,在发送请求时登入了 Authentication账号密码即可正确获取token。不需要token则直接重构即可,不需要代码。
  5. 上述完成后,再次使用SE24 创建一个类,类名为前面的接口类 ZLOCAL_CL_GET_PURCHASEORDER .并且继承超类 CL_REST_RESOURCE
    abap 生成token服务,SAP,HTTP,其他,开发语言,restful
  6. 继承后,根据接口的不同调用方式,重构相应的方法
    abap 生成token服务,SAP,HTTP,其他,开发语言,restful
    这里使用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>).
      TRANSLATE <fs_par>-name TO UPPER CASE.
      TRANSLATE <fs_par>-value TO UPPER CASE.
    ENDLOOP.
    ls_output-clnt = sy-mandt.
    READ TABLE rt_parameters INTO DATA(ls_par) WITH KEY name = 'EBELN'.
    IF sy-subrc IS INITIAL AND ls_par-value IS NOT INITIAL.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = ls_par-value
        IMPORTING
          output = lv_ebeln.
      SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_out FROM ekko
        WHERE ebeln = lv_ebeln.
      IF sy-subrc IS INITIAL.
        ls_output-data = ls_out.
        ls_output-code = cl_rest_status_code=>gc_success_ok.
        ls_output-status = 'success'.
        ls_output-content = '获取成功'.
      ELSE.
        ls_output-data = ls_out.
        ls_output-code = cl_rest_status_code=>gc_success_ok.
        ls_output-status = 'fail'.
        ls_output-content = '获取失败'.
      ENDIF.
    ELSE.
      ls_output-data = ls_out.
      ls_output-code = cl_rest_status_code=>gc_redirection_permanent.
      ls_output-status = 'fail'.
      ls_output-content = '参数错误'.
    ENDIF.

    /ui2/cl_json=>serialize(
   EXPORTING
     data          = ls_output
     compress      = abap_false
     pretty_name   = /ui2/cl_json=>pretty_mode-camel_case
   RECEIVING
     r_json        = lv_output_json ).
     
    " 响应内容" 
    mo_response->create_entity( )->set_string_data( lv_output_json ).
    " 响应内容类型 : application/json"
    mo_response->create_entity( )->set_content_type( iv_media_type = if_rest_media_type=>gc_appl_json ).
    " 响应状态 : 非必须"
    mo_response->set_status( cl_rest_status_code=>gc_success_ok ).
    " 响应说明  : 非必须"
    mo_response->set_reason( cl_rest_status_code=>get_reason_phrase( cl_rest_status_code=>gc_success_ok ) ).
  ENDMETHOD.

POST方式获取body.

    " POST 方式传入参数,JSON"
    DATA(lv_input_json) = io_entity->get_string_data(

二、使用SICF配置服务

配置如下,处理器为 ZLOCAL_CL_REST ,即第一次创建的类。abap 生成token服务,SAP,HTTP,其他,开发语言,restful

三、Postman 测试

1、正确调用
abap 生成token服务,SAP,HTTP,其他,开发语言,restful
2、如果路径不正确会提示没有合适的资源。
abap 生成token服务,SAP,HTTP,其他,开发语言,restful
3、方法没启用,提示不受支持。
abap 生成token服务,SAP,HTTP,其他,开发语言,restful

四、使用token

  1. 使用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 方式传入参数,JSON"
  DATA(lv_input_json) = io_entity->get_string_data( ).

  " JSON 转换为内表"
  /ui2/cl_json=>deserialize(
    EXPORTING
      json = lv_input_json
    CHANGING
        data = ls_data ).

  CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
    EXPORTING
      input        = ls_data-matnr
    IMPORTING
      output       = ls_data-matnr
    EXCEPTIONS
      length_error = 1
      OTHERS       = 2.

  SELECT SINGLE maktx FROM makt INTO ls_data-maktx WHERE matnr = ls_data-matnr.

  " 内表转换JSON"
  DATA: lv_output_json TYPE string.

  MOVE-CORRESPONDING ls_data TO ls_outdata.

  ls_outdata-code = cl_rest_status_code=>gc_success_ok .

  /ui2/cl_json=>serialize(
     EXPORTING
       data          = ls_outdata
       compress      = abap_false
       pretty_name   = /ui2/cl_json=>pretty_mode-camel_case
     RECEIVING
       r_json        = lv_output_json ).

  " 响应内容"
  mo_response->create_entity( )->set_string_data( lv_output_json ).
  " 响应状态 : 非必须"
  mo_response->set_status( cl_rest_status_code=>gc_success_ok ).
  " 响应说明  : 非必须"
  mo_response->set_reason( cl_rest_status_code=>get_reason_phrase( cl_rest_status_code=>gc_success_ok ) ).
ENDMETHOD.
  1. 对请求添加Basic Authentication账号密码,否则无法获取。

  2. 使用Postman 获取token
    请求的Headers 中添加 x-csrf-token 参数,值为 fetch,即可在响应的 Headers 中取得 token 值。
    abap 生成token服务,SAP,HTTP,其他,开发语言,restful

  3. 测试token
    1、使用错误的token会提示验证失败
    abap 生成token服务,SAP,HTTP,其他,开发语言,restful
    2、正确的token
    abap 生成token服务,SAP,HTTP,其他,开发语言,restful文章来源地址https://www.toymoban.com/news/detail-545285.html

到了这里,关于【SAP】SAP 发布HTTP接口之完整的Restful 含( 含Token 验证)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于NodeJs+Express+MySQL 实现实现登录注册接口+token生成与解析验证+跨域-CORS

    目录 一、express是什么? 二、安装 express 三、安装Mysql 四、安装 nodemon 实现项目热更新 五、这里先了解下express的post get delete接口 post接口说明: get接口说明 :  DELETE 接口 六、注册功能 1、流程分析 校验表单数据是否合法 检测用户名是否占用 密码加密处理 插入新用户 2、

    2024年02月11日
    浏览(49)
  • ABAP:调用HTTP接口详解

    DATA:pv_http_client TYPE REF TO if_http_client, pv_url TYPE string. 1.可以通过URL连接或者IP:端口连接,根据实际情况而定, 建议使用URL,省去地址服务器域名转换 \\\"URL接连 CALL METHOD cl_http_client=create_by_url EXPORTING url = pv_url IMPORTING client = pv_http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2

    2023年04月12日
    浏览(43)
  • ABAP - 调用HTTP/HTTPS接口上传文件

    如果调用该外部接口是需要使用Oauth2.0的话,可参照该文章里的OAuth2.0的部分: ABAP代码使用OAuth2.0 Client Credential调用外部API 首先,先将文件内容转成binary格式的内表 , 可参照文章: 内表文件的,可参照ABAP - 下载ALV内表 - download ALV internal table SOST里的附件的,可参照ABAP获取发

    2024年02月20日
    浏览(43)
  • ABAP调用阿里云接口-短信服务-HTTP协议及签名(abap版本)<转载>

    原文链接:https://blog.csdn.net/xiefireworks/article/details/113037650 阿里云接口文档请参考官网地址 https://help.aliyun.com/document_detail/59210.html?spm=5176.8195934.J_5834642020.5.11ba4378DLVi4O 此处仅介绍使用ABAP完成阿里云短信服务签名请求的完成。 第一步:请求参数 1 abap 生成的uuid为32位不带“-”

    2024年02月16日
    浏览(47)
  • SpringBoot发布web service接口,并使用ABAP调用web service<转载>

    原文链接:https://www.cnblogs.com/ybinlog/p/13962634.html 1、引入依赖 关于cxf的版本,要针对不同的spring boot版本选择对应的版本,否则可能会导致容器启动失败: spring boot的1.5.6.RELEASE版本,可选择cxf的3.1.11版本; spring boot的2.1.3.RELEASE版本,可选择cxf的3.2.5版本; 2、编写web service接口

    2023年04月09日
    浏览(97)
  • HTTP接口调用和RESTful调用的区别

    概述 HTTP接口调用是一种基于HTTP协议的远程调用方式,可以通过URL进行调用,适用于不同编程语言之间的调用。而RESTful调用是一种基于REST架构风格的远程调用方式,是HTTP接口调用的一种特殊实现,只是HTTP接口调用不一定要遵循RESTful的设计原则。 区别 URL表达形式不同: ○

    2024年02月09日
    浏览(51)
  • 使用JWT生成token实现权限验证

            点击登录按钮,后端验证账号密码是否通过,如果通过则生成token,把token发送给前端,前端保存到cookie(前后端分离是不能使用保存session,因为每次发送ajax请求响应后都会断开服务器,就会导致session生命周期就销毁掉,然后再发送请求时再重新连接服务器,s

    2023年04月08日
    浏览(56)
  • SAP/ABAP(二)

    一、循环结构 二、条件判断 三、异常处理(cx-root) 四、结构体,工作区 五、内表

    2024年02月17日
    浏览(46)
  • SAP ABAP技术文章合集_微信公众号:ABAP猿

    序号 文章标题 01 ABAP OOALV-基本显示 02 ABAP OOALV-排序、过滤 03 ABAP OOALV-合计、小计 04 ABAP OOALV-选择模式、触发事件 05 ABAP OOALV-隐藏列、修改列标题、添加图标列、调整列位置 06 ABAP OOALV-固定列、鼠标悬停文本 07 ABAP OOALV-颜色(列、行、单元格) 08 ABAP OOALV-样式(列、行、单元格

    2024年02月03日
    浏览(50)
  • SAP ABAP 用户状态锁定案例

    一、前言 项目需求是根据当天及前两天的离职员工信息(假设这是一个定时器任务每天下午5点执行程序,计算前两天的员工工号是为了将5点之后办理离职的员工工号找出来),将这些员工在用户表 USR02 中的锁定状态设置为 “64”,以保证离职员工无法继续使用系统账号。

    2024年02月15日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包