SQLという言葉を聞くと、まずデータベースの作成や操作言語というイメージが沸くと思いますが、SQLにはそれとは異なるしかも重要な側面もあることを知っていただきたいと思います。今回取り上げるSQL HTTP関数は、オープンな環境においてIBM iと異種システムとの連携処理を容易に実現し、IBM iの利用価値を高めるものです。最近このSQL HTTP関数に新たな関数が追加されましたので、今回と次回の2回に分けてこの新しい関数の使い方についての解説ブログを掲載します。(編集部)
新規かつ改良された一連のHTTP関数がDb2 for iに追加されました。ジェシー・ゴルジンスキーとスコット・フォースティ両氏による詳細説明をお読みください。
2021年9月8日 ジェシー・ゴルジンスキー
過去に私がとりとめのない話をしたように、IBMのオープンソースへの投資は、オペレーティングシステムの中核となる幾つかのコンポーネントにまで拡大しています。(ときに「SQLサービス」とも呼ばれる)IBM iサービスの豊富なカタログは、この概念の素晴らしい実例です。たとえば、データキュー・サービスは、データベース活動とApache Camelの間の統合を可能にします。JSONのデータ作成とデータ抽出機能*は、一般的に使われているデータ交換形式を使って様々なテクノロジーとのより良い相互運用を可能にします。
本日の話題では、この道具箱に最も新しく追加された幾つかの機能について説明します。それらは新しくかつ改善されたHTTP関数です。まず手始めに、この新しい技術の要約をしてくれる、仲間のビジネス・アーキテクトであるスコット・フォースティを歓迎したいと思います。
スコットより:新HTTP関数を見てみよう
やあ、ジェシー。このブログスレッドに私を参加させてくれてありがとう。私達は二人とも、IBM iをご利用のお客様がSQLやRESTfulサービスを使って、目的に応じてどのように容易にIBM iをオープンにできる可能性があるかを示すのに時間を費やしてきました。IBM Watsonに質問をするのがどんなに簡単かということ、そして他の多くの面白いシナリオを示すために君とチームを組んだことを懐かしく思い出します。
ところで、何が変わり何故それを気にするべきなのでしょうか?
Db2 for iに対するPTFグループSF99704レベル15を適用したIBM i 7.4およびDb2 for iに対するPTFグループSF99703レベル26を適用したIBM i 7.3で、Db2 for iに新たに改善された一連のHTTP関数が追加されたことを指摘するのを嬉しく思います。
これらの新しいHTTP関数はQSYS2スキーマに格納されています。一方、以前のものはSYSTOOLSに格納され、両者は表面上非常によく似ていますが、「安心」することに、新しいHTTP関数にはいくつかの注目に値する優位点があります。
QSYS2を基盤とするHTTP関数は、ILEサポート用のIWS(Integrated Web Services:統合ウェブサービス)クライアントの一部であるHTTPトランスポートAPIを使用します。以前のものとは違い、これらはJavaを使用しません!この単純かつ重要な違いは、プログラマーが改善された使用体験を期待できることを意味しているので、私達のコミュニティに強く響くはずです。
QSYS2を基盤とするHTTP関数を大切に考えるいくつかの理由は、パフォーマンス改善、サイズ削減、そして全般的なアプリケーションにもっと容易に統合できるものを持っている事です。
表1にあるように、主要な機能には気の利いた名前が付けられており、使うのが容易です。QSYS2を基盤とする関数の名前は、SYSTOOLSのそれとは名前が違いますから、誤って使用する危険性はありません。
表1.QSYS2を基盤とするHTTP関数
基本関数(たとえば、QSYS2.HTTP_GET())は、応答メッセージであるCLOB(2G) CCSID 1208という値を返すスカラー関数です。
詳細関数(たとえば、QSYS2.HTTP_GET_VERBOSE())は、応答メッセージと応答HTTPヘッダを含む2つのCLOB(2G) CCSID 1208の列を返す表関数です。
URLの一部としてパラメータを渡す巧みな機能は、図2に示されるヘルパー関数を使ってより容易に遂行されます。
表2. QSYS2を基盤とするHTTPヘルパー関数
単純な横並び比較をすると、以下の3項目が強調点になります(図1を参照)。
- SQL文の類似性に注意してください。新しいQSYS2関数への移行は、「SYSTOOLS.HTTPGETCLOB」を「QSYS2.HTTP_GET」に変更するくらい簡単かも知れません。
- クエリ実行時間の違いに注意してください。
- クエリ実行後のスレッド数の違いに注意してください。SYSTOOLSの例にある追加のスレッドは、Javaの使用に関連しています。
図1. SYSTOOLSとSQSY2に置けるHTTP GET関数の対比
Db2 for iチームは、新しいQSYS2 HTTP関数を生み出すという傑出した仕事を成し遂げただけでなく、いくつかの役に立つ文書を公開しました。この文書は、あなたが尋ねたいと思うであろう幾つかの質問に間違いなく答えるでしょうから、それを読んでください。
TLSはどうなのか?
スコット、素晴らしい概説をありがとう!
私は、「旧」関数と「新」関数の間にはSSL証明書の処理という明確な違いがあることも付け加えたいと思います。SYSTOOLS系はJavaを使っていたので、インターネットの至る所にある多くの一般的ウェブサイトは「デフォルトで」信頼されていました。その理由は、JavaはDigicertやEntrustなどのような共通証明書権限(CAs: Certificate Authorities)一式と一緒に出荷されているからです。これによって、ほとんどの場合優れた創造的体験が提供されましたが、サイトまたはAPIが、その信頼された集合の中にない証明書を使用した場合、新たな支障が持ち込まれもしました。その場合、それを動くようにするにはJava導入の証明書ストアを更新する必要があり、それは簡単な仕事ではありません。
QSYS2の関数はTLS暗号化のためのシステムサポートを使用します。エンドポイントが信用されていない場合、システムのGSKitライブラリからSQL0443エラーを受け取ることになります(図2を参照)。
図2.HTTP宛先が信頼されていない場合のエラー
しかし、QSYS2関数の明白な利点は、証明書がデジタル証明書管理(DCM: Digital Certificate Manager)によって管理されていることで、証明書の管理が非常に簡単です。以下に、TLS用に信頼された証明書を追加する幾つかの方法を示します。
- SSL証明書を追加するための文書のステップを参照する。
- 最新のDCM PTFを適用し、DCMインターフェースの「CAの追加」機能を使う。このブログ執筆時点で、最新のPTFは、IBM i 7.4用のSI77131とSI77132またはIBM i 7.3用のSI77118とSI77121です。
- オープンソース・プロジェクトのDCM Toolsから、「dcmimport」ツールを使う。
これがオープンソースと何の関係があるのか?
何だかんだ言っても、これはオープンソースブログです。お分かりですよね?以前、これらの新関数はオープンソース技術を使う人達にとって、何らかの形で役に立つということを示唆しました。次回、この2部構成のシリーズの第2部を公開するつもりです。その議論においてさらに深堀し、どのようにデータベース・アプリケーションが、これらの新機能をオープンソース技術と共に使えるかを調べることにします。
原文ではJSON publishing and consumption functionsとなっていますが、正確にはDb2 for iのJSON Publishing functionおよびJSON Scalar functionsを指しているものと思われます。前者はJSON配列またはオブジェクトを生成するSQL関数で、JSON_ARRAY、JSAON_ARRAYAGG、JSON‗OBJECT、JSON_OBJECTAGGがあります。後者はJSONデータから特定のJSON値またはSQLスカラー値を抽出するSQL関数で、JSON_QUERY、JSON_VALUEがあります。これらの関数の詳細についてはマニュアルをご参照ください。