SAP 如何提供 RESTful Web 服务?

SAP 推荐以 OData 方式提供 Restful Service。Netweaver 7.4 之后的版本可以直接使用 OData 服务。7.4 之前的版本需要升级 GW_COREIW_FNDIW_BEP 三个核心组件(参见 SAP OSS Note:1569624)。

7.4 之前的版本也可以用另外一种方式,也即本文要介绍的方法。SAP 提供 Restful Web Service,从技术层面上来说可以分解为三个问题:

  • SAP 对外提供 Http Service
  • 在 SAP 端解决诸如 authentication,cookie, session 等 Http server 必须解决的问题
  • SAP 端实现将响应 (response)以 json 格式返回给客户端,对客户端 json 格式的请求(request)解析并处理

本篇先介绍第一个部分。

SAP 如何提供 Http Service

SAP 对外提供 web service 需要用到一个叫 ICF (Internet Commincation Framework) 的框架。参考 SAP help,该框架的体系如下:

如果要将 SAP 应用程序服务器 (application server)作为 http 服务提供者,需要定义一个类,这个类必须实现 IF_HTTP_EXTENSION 接口。IF_HTTP_EXTENSION 接口只有一个方法 HANDLE_REQUEST。自定义的这个类必须实现 HANDLE_REQUEST 方法。HANDLE_REQUEST 方法的 SERVER 参数是一个 http server 对象 (类型为 ICF 框架的 IF_HTTP_SERVER 接口)。http server 对象具有的属性和方法对请求响应进行处理。

然后使用 SICF 事务码创建服务,并且将处理器(handler)设定为自定义类。客户端就可以访问这个服务了。

接下来实现一个最简单的 http service,json 格式使用硬编码实现。

定义实现 IF_HTTP_EXTENSION 接口的类

使用事务码 SE24 创建一个类,类名为 Z_SIMPLE_REQ_HANDLER

切换到 Interface 页签,在接口中输入 IF_HTTP_EXTENSION 然后回车,表示该类实现 IF_HTTP_EXTENSION 接口。再切换到 Method 页签,双击 HANDLE_REQUEST 方法,进入源码编辑界面。

HANDLE_REQUEST 的代码如下:

METHOD if_http_extension~handle_request.
  
* lv_verb is http method such as GET, POST etc
  DATA lv_verb TYPE string . 
  DATA lv_json TYPE string .

  lv_json = '{"value": [{"ID": 0,"Name": "Food"},{"ID": 1, "Name": "Beverages"}, {"ID": 2, "Name": "Electronics"}]}'.

* Only handles GET method
  lv_verb = server->request->get_header_field( name = '~request_method' ).

  CHECK lv_verb = 'GET'.
  server->response->set_status( code = 200 reason = 'Ok' ).
  server->response->set_content_type( 'application/json' ).
  server->response->set_cdata( data = lv_json ).
  
ENDMETHOD.

完成后激活该方法。

创建 web 服务

使用事务码 SICFdefault_host/sap 节点下面创建子节点,使用 Z_SIMPLE_REQ_HANDLER 类并激活方法:

测试服务

在浏览器中输入 http://sapecc6:8000/sap/zsimple_service?sap-client=001,即可以看到 SAP AS 提供的服务。注意示例中的 sapecc6 需要 IP 地址或者能进行 DNS 解析的域名。客户端浏览器显示的结果如下:

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值