适宜读者:一年及以上主机经验
背景知识:z/OS基础知识
作 者:STEVE WARREN
原文地址:http://publibfp.dhe.ibm.com/epubs/pdf/e0z3n110.pdf P69
近年来,Web服务相关的应用越来越多。基于HTTP或HTTPS协议,发送JSON或XML数据的RESTful应用已经在移动、客户端/服务器应用领域中普及。
如果运行在传统环境下的现有的那些z/OS应用也可以轻松的加入其中,并将一系列原生的z/OS服务提供给z/OS上的大多数程序,这是不是很酷呢?
如果你对这些可能性感到兴奋,那么欢迎了解z/OS客户端Web支持工具包!为了在z/OS操作系统中构建这些应用,工具包提供了以下构建属性,以实现轻量的解决方案让这些应用能轻松地用于客户端/服务器架构。
- z/OS JSON解析程序:可以用来解析任何来源的JSON文本,并且能建一个JSON文本或添加到一个已经存在的JSON文本中。
- z/OS HTTP/HTTPS协议使能器:这个机制使用的接口就是类似于行业标准的API。
z/OS上的所有环境都会从这两个服务中受益。运行在z/OS本机上的传统程序很少提供或者说没有提供选项来允许用户连接到网络中去。然而,这些以批量作业,后台服务的形式来运行,并几乎运行在z/OS系统任意地址空间中的程序现在也有了API。这些API可以像操作系统提供的任何标准的z/OS API一样来使用。
此外,程序员可以使用它们选择的语言来使用这些APIs。你可以用C/C++,COBOL,PL/I及汇编语言。同时,C/C++,COBOL和PL/I有示例代码提供。
你是否愿意了解更多关于工具包的组成部分,并且通过这个工具包,看看你都能做些什么呢?
z/OS JSON解析程序
假设你希望搞清楚与你交互的网络服务器发来的一个大的JSON文本文件的意思。这个新的z/OS JSON解析程序可以为你担此重任。
以下的问题可以帮助你决定哪种解析方式最适合你:
- 你是否知道返回的数据格式?
- 你是否在特定的格式中查找特定的区域?
- 你是否需要对返回的所有数据都有所了解?
基于你的回答,你可以选择“搜索”类型,“遍历”类型或者两者相结合。“搜索” 类型是在文本流中去搜寻特定的关键字,然后找出与这些关键字相关的值。而 “遍历” 类型则是启动遍历解析服务,在文本流中进行递归的搜寻直到分析出发送信息。
在任何一种情况下,一个程序只要使用JSON解析服务都需要遵照以下格式:
- 启动JSON解析初始化服务(HWTJINIT)来创建一个解析实例。
建议:你可以进行扩展,根据你的应用所需,来创建多个解析实例。每个解析实例都允许z/OS解析程序来分开管理一个JSON文本流的分析。因此,拥有越多的解析实例,则可以同时解析越多的JSON文本流。
- 调用JSON Parse服务(HWTJPARS),通过解析程序来验证文本流的语句,然后创建一个JSON文本数据的内部表示方式。数据一旦被解析,就可以立马被使用,这使得接下来的服务可以运行的更快。
- 获取所需的数据:
- 如果你使用“搜索”类型,有可能在这里调用JSON Search服务(HWTJSRCH)在数据(一个JSON键值对中的名称)中查找一个特定的键名。假如这个键名被找到,就需要调用解析程序的“get”服务来获取这个键名对应的值。如果需要,你也可以对一个特定的JSON对象进行范围查找。
- 如果你使用“遍历”类型,你可以简单地重新使用工具包samplib里提供的其中一种编程语言的示例代码。这些示例提供了一个简单的分析JSON文本流的方法。返回的数据能使得代码在一个对象或者数组内整个进行迭代,因此,调用合适的JSON解析服务直到分析完所有的数据。
- 当过程全部结束,解析程序实例(HWTJTERM)用来释放被解析程序占用的存储空间。
就是这么简单!顺便提一点,你是否希望创建JSON文本或者在你接收到的现有文本流里加新的条目?如果是的,这里便有解答!你可以用JSON Create服务(HWTJCREN)和JSON Serialize服务(HWTJSERI)轻松地新建一个JSON文本或者重新建整个JSON文本流。
z/OS HTTP 使能器
如果现有的z/OS应用可以自身网络化,通过一个行业标准来与网络服务器进行通信,发送并接收REST API的请求和响应,这不是很棒吗?工具包中HTTP/HTTPS促成机制部分提供以下功能:
- 应用程序可以通过简单的API调用与服务器连接
- 应用程序可以建立一个HTTP请求,将这个请求发到服务器,然后接收响应。
工具包里同时支持SSL(包括TLS),cookies,代理器及重定向器。
那么,应用程序怎样使用工具包来实现REST API交互的呢?以下是一个应用程序的实现过程:
- 初始化一个连接(HWTHINIT),准备好工作区域,以便让工具包来处理这个连接。
- 设置必需的连接选项(HWTHSET)。在这一步,可以设置网络服务器的URI,SSL选项,cookie处理步骤,及其他选项,但是一次只能设置一个选项。
- 连接到服务器(HWTHCONN)。
- 初始化一个请求(依然调用HWTHINIT),准备好另一块区域,以便让工具包来处理这个请求。
- 设置必需的HTTP请求选项(HWTHSET)。你需要将哪种HTTP请求报头发送到服务器呢?请求主体又是怎样发送的呢?哪段应用代码应该接收控制并处理网络服务器端返回的数据呢?同样,这个也是一次只能设置一个选项。
- 发送请求(HWTHRQST)将请求加入一个特殊的连接,并通过此连接发送请求。响应则发送给用户回调例程。
- 做后续清理工作。你可以停掉请求来释放其占用的工作区域存储空间,断开与网络服务器的连接,并且结束连接。任何的服务在你的应用中都行得通。
千万别感到不知所措,一个例子比任何的语言描述都更有价值。在很多z/OS编程语言里都提供了例子,这些例子足以证明这其实很简单。
那你如何着手使用这个工具包呢?以上两部分在z/OS V2R2上均可用。工具包的z/OS JSON解析程序部分是从2015年4月,V2R1版本时可用的,而HTTP促成器部分在V2R1版本下现在也可用了。
关于这个工具包的更多信息可以参照z/OS MVS Programming: Callable Services for High-Level Languages, SA23-1377及z/OS Introduction and Release Guide, GA32-0887。
译者:唐婷婷
邮箱:tttangATcn.ibm.com(替换AT为@)
内容声明:本文仅代表作者的个人观点,与IBM立场、策略和观点无关。文中专业名词因翻译原因,表述中难免存在差异。如有疑惑,请以英文为准。同时数据来源于实验室环境,仅供参考。如果您对我们的话题感兴趣,请通过电子邮箱联系我们。