Jerry 之前的公众号文章 什么?在 SAP 中国研究院里还需要会 PHP 开发?提到了一个 SAP Kyma 的应用场景:
旅行兼社交达人伊森,使用经过 SAP Kyma 扩展之后的 WordPress 这个网站来写博客。伊森每次在 WordPress 上发表一篇博客之后,WordPress 会暗地里向 Kyma 实例发送一个“博客创建”的事件,并且把创建好的博客内容作为事件参数传递给 Kyma。部署在后者上的事件响应函数,调用各大社交媒体平台的 create API 进行对应帖子的创建。这样伊森轻松地实现了文章的“一次发布,各大平台开花”的目的。
从本文开始,Jerry 会逐一介绍这个扩展场景的技术实现步骤。该扩展场景的实现原理和使用 SAP Kyma 对 SAP C/4HANA 进行扩展的机制是一样的。比如把 WordPress 的博客发布事件想象成 C /4HANA Service Cloud 里一个服务订单的创建事件,我们可以根据自己实际业务需求在 Kyma 上编写对应的事件处理函数。
在之前的文章 什么?在 SAP 中国研究院里还需要会 PHP 开发?里 Jerry 已经介绍了如何安装 WordPress 的 Kyma 插件。需要强调的是,如果用 Kyma 对 C /4HANA 进行扩展,那么后者针对 Kyma 的插件同 WordPress 针对 Kyma 的插件一样,是由 SAP 负责提供和维护的,大家即使不了解 Jerry 本文介绍的这些细节,一样能很好的完成扩展开发工作。
本文主要介绍如何在 WordPress 和 Kyma 实例间建立互相信任的连接,并且将 WordPress 指定的事件发布到 Kyma 上去。
WordPress 的 Kyma 插件安装完毕后,在设置选项里,能看到对应 Kyma 连接的维护界面。
这里最重要的字段是需要维护一个指向 Kyma Application Connector 服务的 url,即下图的字段“Kyma Connection”.
以及在此处维护您到底想把 WordPress 的哪些事件,注册到 Kyma 上。
注册完毕后,在 WordPress 的 Kyma 插件界面里维护的这些事件,就会出现在 Kyma service catalog(服务目录) 界面里。通过这种事件注册机制,避免了 WordPress 和 Kyma 的紧耦合关系:工作于 Kyma 之上的扩展开发人员即使对 WordPress 的技术细节完全不了解,也丝毫不影响其扩展开发工作:只需要在 Kyma 的服务目录里,找到 WordPress 暴露出来的事件,用自己喜欢的编程语言开发对应的事件响应函数即可。
回到 WordPress 的 Kyma 维护界面里的 Kyma Connection 字段,到底需要维护什么样的 url?
在 Kyma 里创建一个新的应用,点击 Connection Application 这个按钮,弹出来的这个对话框里的 url 即是我们要找的 url.
在我们把 url 复制到 WordPress 的 Kyma 插件里之前,我们可以先在浏览器里访问这个 url,看看会返回什么内容:
这个 JSON 响应的第一个字段 csrUrl(Certificate Signing Request) 和最后一个字段 certificate,包含的信息用来生成用于在 WordPress 和 kyma 之间建立 SSL 连接所必需的数字证书。而 api 结构的几个字段则是 Kyma Service Catalog 注册的 endpoint.
我们把这个 url 复制到 WordPress 的 Kyma 插件里,点击 Connect 按钮,即可发起指向 Kyma 实例的连接。
我们以调试模式启动本地 WordPress,点击 Connect 按钮,
设置在 class-connector.php 的 connect 函数内的断点即触发。这个函数负责向传入的 url 发起 HTTP GET 请求,解析出 Kyma 返回的 CSR url 和 Kyma 服务目录的 endpoint,然后再分别发起不同的 HTTP post 请求,去拿到 Kyma 返回的数字证书以及将 WordPress 的指定事件注册到 Kyma 上去。
第 73 行的变量 $body_json->csrUrl 维护的是 Kyma 的 Certificate Signning Request url,第 75 行向这个 url 发送一个 post 请求,拿到响应:
解析响应里包含的 certificate 信息,存储成对应的本地文件:
接下来和 Kyma 实例的交互,需要使用到这些存储在 WordPress 本地的数字证书文件:
而需要注册到 Kyma 上的 WordPress 事件,又是采用何种格式发送到 Kyma 的呢?
浏览器里访问 url:< 安装 WordPress 的主机名 >/index.php/wp-json, 即可得到所有 API 列表:
WordPress 的 Kyma 插件会根据用户在插件界面维护的待注册事件,拼装成对应的 JSON 字符串然后通过 HTTP post 发给 Kyma:
注册成功后,在 Kyma 控制台的应用界面的服务和事件列表里,就能看到 WordPress 的对应记录了:
同时在 Kyma 的服务目录里,出现了 Jerry 之前在 WordPress 的 Kyma 插件界面里维护的 WordPress connector 名称和描述信息:
至此 WordPress 在 Kyma 上的注册就成功完成了,在 Kyma 上负责实现 WordPress 事件响应函数开发的程序员们就可以开工了。这部分的开发,Jerry 接下来的文章会继续介绍。
Jerry 在进行本文介绍的 WordPress 同 Kyma 建立连接的实际操作时,得到了我的同事,SAP 成都研究院 C4C 团队开发人员 Li Sherry 的大力支持和帮助,这里表示感谢。
要获取更多 Jerry 的原创文章,请关注公众号 ” 汪子熙 ”: