(Photo by:Thomas van de Weerd)
XMLを使用したアプリケーション通信
通信と言うとさまざまな方法が考えられます。TCP、UDP、ICMPなど。
アプリケーションで通信するのには、HTTPの層が一番です。
そのHTTPでの通信を行うのに、プロトコルとしてXMLを使って通信するのが、SOAPです。
Simple Object Access Protocolと書いてSOAP(ソープ)と読みます。
実際はもっと下層の通信でも使うことはできるのですが、現実的ではないため、HTTPでの通信が最も適したものになります。
アプリケーション間の通信で使われ、例えば複数のベンダーが参加するマルチベンダー式プロジェクトなどで相互のアプリケーション通信などに最適です。
アプリケーション間通信ではプロトコルを決める必要があり、そのために最も適したものがXMLを使用したSOAPというわけです。
アプリケーションはApache Axis
実装としてはApacheプロジェクトが開発を行っているAxisがあります。現在のバージョンは2で、実質3代目のサービスとなります。
JavaとXMLをベースに開発されたフレームワークで、無料で使うことができます。
国内の各ベンダーもSOAPフレームワークを提供していますが、安定性という点ではApaceh Axisが優れているでしょう。
SOAPの記述はWSDLで行われています。WSDLはXMLのインターフェース記述言語で、独自の規約に従ってXMLを記述します。
XML自体は自由なマークアップ言語ですので、タグ設定なども自由に行えます。
そのためSOAPのプロトコルが独自記述だらけになるのを防ぐために、統一したWSDLが必要となるのです。
WSDLは独特の形式ですが、基本を覚えたら簡単にデータのやりとりをすることができます。types,message,operation,portType,binding,port,serviceのタグが使われます。
WSDLを使ったXMLを通信するのに使うのがApache Axisです。
Axisは出来がよく、通信するのに優れたフレームワークです。
(Photo by:Breyten Ernsting)
エンベロープ、ヘッダ、本体(BODY)
XML自体は、エンベロープ、ヘッダ、本体にわかれます。
このうちヘッダだけは任意なのですが、エンベロープと本体は必須です。
エンベロープは最上位の要素です。ヘッダは任意、本体はメッセージ通信のメインです。SOAPのXMLは、HTTPのPOSTメソッドを使って相手に送信します。基本はPOSTでやるべきですが、GETメソッドでも間違いではありません。
本体は呼び出すメソッドを記述して、要素にはnameとidを入れます。
リモートでメソッドを呼び出す
何のためにSOAPで通信するかと言うと、言語もサーバーも異なる複数のアプリケーション間で通信するためです。そしてメソッドを呼び出すためでもあります。そのため規約は厳密に守る必要があります。独自の実装をしても構いませんが、SOAPの記述自体はしっかりと規約を守ったものにしないと、アプリケーションの連携が取れません。実装する際にはアプリケーション間でメソッド名と引数、戻り値を定義する必要があり、それらを共有してから実際の開発にかかります。開発の手順としてはインターフェース部分を作成して、それらのテストが終わってから実際の内部実装に取り掛かるといいでしょう。
開発はAxisの場合、主にJava
Apache Axisは主にJavaを開発言語として実装されています。ですがC++の開発も可能となっています。主にJavaでプログラムを組むことを主軸にしており、プロジェクト運営にはJavaエンジニアのアサインが必要となります。またデプロイなどの作業が必要ですので、アプリケーションサーバーに詳しい人材も必要となるでしょう。通信はHTTP上で行うのがメインであるため、あまりネットワークに詳しいメンバーは必要ありません。ですがアプリケーション通信を行う場合、ファイアーウォール内のサーバー間通信を行うため、ある程度のネットワークの知識は必要となります。あまりファイアウォール越しの通信は行われません。あくまで同一セグメント内でアプリケーションが配置されることが多いです、Axisを使わないのであれば、NuSOAPなどではPHPでも開発は可能です。
Windows.NETでもSOAPサポートをしています。
2000年代半ばに入って多くのSOAPアプリケーションサーバーがリリースされました。
XMLパーサーはバグの少ないものを
開発にあたって、重要なのはインターフェースの部分です。通信をしっかりできないとアプリケーション間連携になりません。そのため、パーサーはバグが少なくて信用できるパーサーを選んでください。もちろん、使いやすいものを選ぶのも大切です。XMLパーサーは使い勝手にばらつきがあり、プログラマの好みもありますが、可読性の高いパーサーを選んでメンテナンスが楽になるようにしたほうがいいでしょう。SOAPを使って運用するようなプロジェクトは大規模なものになりがちですがら、開発メンバーの入れ替え、開発者と運用メンテナンス者が異なることは大いにありえます。そのため読みづらいコードになると運用コストがかかってしまいます。ですのでパーサーを選ぶときは慎重に行ってください。1プロジェクトで1つのパーサーを使いまわすことがほとんどですから、プログラミングの開始最初にすることは、このパーサーを選ぶことかもしれません。プロジェクト内で話し合って、慎重にXMLパーサーを選んでください。
あくまでプロトコルである
SOAPはあくまでプロトコルであり、通信の規約を規定したものです。ですのでアプリケーション自体はプロトコルを守っていれば自由に開発していいのです。インターフェースを規定しているだけで、どのように実装するかは自由なのです。むしろ、開発言語や開発方式、プログラミング言語に依存しないレイヤーでのやりとりを行うのに使われているのがSOAPなのです。
SOAPを使ったプロジェクトの大きな事例
少し古い事例になりますが、e-Japan戦略で総務省等が開発した電子申請システムなどではSOAP通信が使われています。マルチベンダ体制で複数のSIerが参入し、同時に複数のシステムを動かしています。そのベンダ間通信の標準プロトコルとしてSOAPが導入されたのです。XMLのパーサーは各自自由に設定しますが、SOAPの独自記述を守り、通信することで、開発スタイルも開発工程も異なる複数のベンダの開発を実現しました。これは総務省が主導して、IBM、富士通、日立、NTTdataなどがSOAPを使って通信し、大掛かりなプロジェクト開発を実現しました。
大規模プロジェクトに
アプリケーション通信という役割ですので、大規模プロジェクトに向いています。小さなプロジェクトであればHTTPで通信しなくとも、プロセス間通信でスピーディーに実装できるからです。そのため、SOAPを導入するのはある程度規模の大きな大規模プロジェクトが最適となります。小さなプログラムで導入できないことはありませんが、あまり意味はないでしょう。開発言語が複数あったり、開発の会社が多数入っていたりする場合のアプリケーション間通信に最適なのがSOAPです。
BtoBでの利用が多い
大規模プロジェクトの開発に適していますので、利用実績としてはBtoB型のプロジェクトが多いようです。ポータルサイト、ECサイト、携帯電話のサイトなど、大型の案件に利用されています。前述の通りe-Japan計画の電子申請ネットワークにも使われています。これはBtoBとはいえませんが、大規模プロジェクトの案件です。
(Photo by:Campus Party Europe in Berlin)
SOAPエンジニアとして生きるには
SOAPは現在でも使われている通信方法です。
ですので開発経験を持っておいて損はありません。
ですが、使われる案件がある程度大きなプロジェクトに限られますので、SOAPの開発経験があるのであればベンダーなどの内部に入った方が使い勝手がいいでしょう。
技術系のベンチャーでもSOAPは取り扱っていますが、どうしてもベンチャーは小回りが聞く分小さな案件を開発するケースが多いですので、インターネットビジネスになりがちです。そのため、基幹業務の案件が多いSOAPの開発実績はあまり必要とされないかもしれません。大手企業ならばスポット的に歓迎される技術ではありますが、基幹業務の案件は開発バブルも収束しており、今後はマーケットが縮小し、開発よりも運用やリプレースの商談が多くなってくると思われます。SOAP技術だけで生きていくのはハードな道のりかもしれません。ですがSOAPを使った開発に必要な知識・技術は、プログラミング言語だけでなく、XMLの基本、通信のレイヤー、リモートメソッドコールなど、幅広い技術力が必要ですので、エンジニアの基礎力を試すにはいい案件といえるでしょう。
基幹業務系の技術でもあります
今エンジニアの業界でトレンドであるスマホアプリの開発とはまったく関係のない技術です。ですので最先端のトレンドとはいい難いものがありますが、それでも大企業に入って大きなプロジェクトに参加する際に、必要とされることはあるかもしれません。ゼロからSOAPを開発するチャンスは少なくとも、かつてSOAPで開発されたシステムの運用やメンテナンスを任されることがあるかもしれません。特にベンダーで働く人にとっては会ったほうがよい知識でしょう。あまりベンチャー企業では役に立たない技術かもしれませんが、基幹業務系の大手企業ではまだまだ必要とされている技術だと思います。特にXMLを取り扱えるようになるのが大きいです。SIerで働く人は注目してみてください。
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments