一
前言
REST服务是目前接口调用最通用的方式,通用性似乎都超过了WEBSERVICE. 大部分的互联网公司都是用REST方式发布自己的服务. 并且通过https(加密), token(令牌),sign(签名)等机制确保通讯安全.
本文主要讲解怎么通过CPI透传REST服务,并且在CPI中实现获取token及按特定算法加密获取sign(签名)
感谢黄顾问配置IFlow,给作者机会学习IFow中的脚本写法.
二
Token and Sign
百度了一下Token和Sign的定义.
三
获取token(令牌)
一般的系统会发布一个特定的地址,用来供外围系统调用获取token.
比如腾讯企业微信的API中就有一个获取token的服务, token 一般会有个有效期, 在有效期内,token可以重复使用.
在所有其它REST服务中, 都需要在http header 或者 报文中添加 access_token. 服务对接收的token执行验证,验证通过再继续后续的处理.
四
获取sign(签名)
签名是对本次调用内容的合法性验证.
一般的签名算法是通过把报文的内容按特定规则组合,进行一次或多次MD5加密.
服务器会按照相同的算法再次加密,并且把加密后获取的sign与传输的sign 进行对比,通过后才进入服务的后续处理逻辑
五
CPI透传REST
CPI透传JSON的配置非常简单, 相对复杂的是在这个过程中获取token及签名
该配置的大致逻辑
检查传入的JSON中是否存在token,如果存在,则直接进入签名逻辑.
如果不存在token,准备调用token的报文,调用服务,获取token,并把获取的token加入报文中
按服务提供方提供的签名算法,执行加密过程
把签名结果加入报文中,调用REST服务
在返回结果中补充token信息,返回给调用方
如果调用方传入标记(只获取token和sign),则直接返回获取的token和sign.
01
IFlow runtime configuration
在IFlow的空白处点击,拖出底部窗口, 可以修改 runtime configuration. 这里可以限制https 允许的抬头参数
02
CHECK TOKEN
该节点是个脚本节点.通过GROOVY脚本获取报文信息,判断是否传入了token. 并且把传入报文的通用参数写入消息属性, 以便后续使用(包括原始报文).
03
with token
如果传入了有效的token.(token的有效性在发出系统判断,根据token的失效时间判断),直接执行签名步骤
04
准备获取token的报文
05
token sign
对获取token的报文添加签名. 通过脚本添加签名
06
调用token获取
通过 request replay 节点 调用外部系统的token服务, 获取token信息
07
process token
处理令牌
脚本节点, 通过脚本处理获取的token .
获取原始报文,添加token节点,同时把token相关信息写入消息的属性.以便后续使用
08
获取签名失败
如果获取签名失败, 结束
09
sign
签名,脚本节点
对于补充了token的原始报文,添加签名信息
10
仅返回签名
如果调用方传递了抬头参数 get_token_sign. CPI获取token和签名后结束IFlow, 原报文添加token和签名后返回
这个参数的目的: 通过POSTMAN测试目标系统的服务比较麻烦, 所以可以通过CPI服务添加get_token_sign参数来获取该接口的 token ,sign 信息, 然后补充在posman中,以便测试接口
11
调用外部系统的服务
通过request reply 节点调用外部系统的正式服务, 传递的报文在原报文基础上补充了token 及sign 部分.
12
return token
脚本节点
把token补充到外部服务返回的信息中. 以便调用系统能够保存token并在下次调用时根据token的失效日期判断是否可以直接使用.以便提高接口的效率(不必每次都调用获取token的接口)
六
S4/ECC端的调用
S4/ECC端调用CPI详见链接
无峰,公众号:ABAP 技巧与实战CPI系列 通用接口-数据写入FTP服务器csv文件
需补充token的存储及有效token的使用逻辑
七
总结
通过rest方式 传输json报文可以让系统设计一个通用接口, 通过报文的内容识别具体传递的内容及后续处理方式.
CPI对于这类接口只需要把发出系统的报文透传到目标系统(需要的话,补充token获取或sign获取逻辑, 把相关信息补充到源报文中,再调用目标系统的REST服务).
本文给出了一个CPI通用的处理方式. 其中SIGN签名算法依赖于目标系统给出的逻辑. 其它部分比较通用.
groovy 脚本在CPI中可以比较方便的处理传递的消息.
groovy脚本中通过对message 的抬头,属性及body 的处理,可以改变源系统传递的报文内容.
groovy脚本中通过message 的属性,可以在各脚本间传递变量内容
THE
END
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
(如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)
公众号 : syjf1976_abap
ABAP开发技巧
微信号 : 392077
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论