先日JAX-RSが分からな過ぎて記事を書きました。
あれからしばらく経ちましたが、再びJAX-RSが必要と思われる場面に遭遇しました。サーバー間で通信が必要な場面です。
前回、理解はしていないけどもJAX-RSプログラムは作成したので動く手本となるものは手元にあります。しかし、動かしてみたのだが意味が分からない!こんなに意味不明だっけ?といった具合で前回のことさえ忘れてしまっていました。
そこで、今回JavaでREST通信する方法について調査してみました。
REST通信について
そもそも REST とは何なのか。REST は、Representational State Transfer の略称です。プロトコルではありません、アーキテクチャのスタイルや原則の意味で使用されます。プロトコルとしてはHTTPを使用します。
RESTを使用してサーバー間の通信を実施する方法はたくさんあるようです。しばらく調査した結果、jerseyが情報量も多く使いやすそうです。
jerseyは通信データとしてclassを送受信する上級者向けの方法もとれますが、XMLやJSONを送受信するお手軽な方法もとれます。ひとまずはそれを身に付けよう。
Java HTTP Clientについて調査
jerseyってサービス側ばかりの記事だな。もしかしてクライアントは違う言い方をする?jerseyはサービスとクライアントがセットになったものという認識でOK?
と思って調査してみると、クライアントは手軽に使えるものが色々とありそうだ。java http client spring と調べると沢山出てきて良い。
WebサービスクライアントでなくてHTTPクライアントと調べればよかったのな。
と思ったが良い記事を見つけた。このサイトでは様々なHTTP Clientの比較をしてくれている、こういうのを探していた。
上記サイトを見て、自分で各種HTTP Clientのソースコードを見てきました。そして、私にとって一番理解しやすかったのが「Apache HttpComponents」でした。ソースコードも直感的に分かりやすし、Apatch HttpComponents 公式サイトのサンプルが豊富なので有難い。
ということでソースコードを組んでみて、Web APIと通信させたので次回の記事でソースコードの公開と説明をします。
最初はSOAP通信とREST通信をごっちゃにしていた
今まで知らずに構築していましたが、Webサービス・クライアントは3種類あるらしいです。
Webサービス・クライアントについて、主に以下の3つのコーディング方法があります。
- ディスパッチ・クライアント
- 動的プロキシー・クライアント
- Spring JaxWsPortProxyFactoryBeanの利用
でもなんか、これみんなwsdl使ってるね??私が求めているものと違うかも??
様々なWebサイトを見てみたがどれもSOAP通信のことが記載されていた。Webサービス・クライアントというのはSOAPで使う言葉のようです。
私が使いたいのはREST。
その他 気付いたこと
Javaにも標準でHttpClient が付いたらしいな??
かなり昔からあるみたいだ。