[解決済み】JavaのRESTクライアントはどのように作成しますか?[クローズド]。
2022-04-07 05:05:22
質問
JSR 311とその実装により、私たちはREST経由でJavaオブジェクトを公開するための強力な標準を手に入れました。しかし、クライアント側には、SOAPのApache Axisに匹敵する何かが欠けているように思われます - Webサービスを隠し、データをJavaオブジェクトに透過的にマーシャルバックする何かです。
Java RESTful クライアントはどのように作成するのですか?HTTPConnectionと結果の手動パースを使って?または、JerseyやApache CXRなどのための特別なクライアントですか?
どのように解決するのですか?
これは古い質問(2008年)なので、当時よりも選択肢が多くなっています。
- Apache CXF は3つの異なる RESTクライアントオプション
- ジャージー (前述)を参照してください。
- Spring RestTemplate に取って代わられました。 Spring WebClient
- コモンズHTTPクライアント 古いJavaプロジェクトのために自分でビルドしてください。
UPDATES(2020年現在も活動しているプロジェクト)。
- Apache HTTP Components (4.2) Fluent アダプタ - JDKの基本的な代替品で、このリストの他のいくつかの候補でも使用されています。古いCommons HTTP Client 3よりも優れており、独自のRESTクライアントを構築するのに使いやすい。のようなものを使う必要があります。 JSONパース用Jackson をサポートし リソースURIを構築するためのHTTPコンポーネントURIBuilder Jersey/JAX-RSのRestクライアントに似ています。HTTPコンポーネントはNIOもサポートしていますが、RESTの短いリクエストの性質を考えると、BIOよりも良いパフォーマンスが得られるとは思えません。 Apache HttpComponents 5 は、HTTP/2をサポートしています。
- OkHttp - JDKの基本的な代替品で、このリストの他のいくつかの候補で使われているhttpコンポーネントに似ています。新しいHTTPプロトコル(SPDYとHTTP2)をサポートしています。Androidで動作します。残念ながら、真のリアクターループベースの非同期オプションは提供されていません(上記のNingとHTTPコンポーネントを参照)。しかし、新しいHTTP2プロトコルを使用すれば、これはあまり問題ではありません(接続数が問題であると仮定して)。
- Ning Async-http-client - はNIOサポートを提供します。以前は <ストライク 非同期-http-client Sonatype社製 .
- フェイン 低レベルの http クライアント (okhttp, apache httpcomponents) 用のラッパーです。JerseyやCXFの拡張と同様に、インターフェーススタブに基づいてクライアントを自動生成します。Springとの強力な統合。
- レトロフィット - 低レベルの http クライアント (okhttp) 用のラッパーです。Jersey や CXF の拡張と同様に、インターフェーススタブに基づいてクライアントを自動生成します。
- ボレー google による jdk http クライアントのラッパー。
- グーグルヘルプ Google による jdk http クライアント、または apache httpcomponents のラッパー
- ユニバース kong 氏による jdk http クライアントのラッパー
- 安楽 jdk http クライアントの JakartaEE ラッパー、jboss による、jboss フレームワークの一部
- jcabi-http apache httpcomponents 用のラッパーで、jcabi コレクションの一部です。
- レストレット restlet フレームワークの一部である apache httpcomponents 用のラッパーです。
- レスト・アシュアード ラッパーで、テストを容易にするためのアサート
HTTP/RESTクライアントを選ぶ際の注意点。フレームワーク・スタックがHTTPクライアントとして何を使っているか、それがどのようにスレッディングを行うかを確認し、理想的には同じクライアントを提供するならばそれを使うようにします。もし、Vert.xやPlayのようなものを使っているなら、フレームワークが提供するバスやリアクターループに参加するために、そのバッククライアントを使いたくなるかもしれません...さもなければ、興味深いスレッドの問題に備えることができます。
関連
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] java.lang.ClassCastException: java.util.Arrays$ArrayList は java.util.ArrayList にキャストできません。
-
[解決済み] 一部の入力ファイルが非推奨のAPIを使用またはオーバーライドしている
-
[解決済み] Eclipse- Dynamic Web Module 3.0 で新しいプロジェクトを作成するときに Java 1.6 以降が必要なエラーが発生する。
-
[解決済み] javascriptでExpression言語を使うには?
-
[解決済み] 型の不一致:ArrayListからListへの変換ができない
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] ファイルを作成せずに、ファイルが存在するかどうかをチェックする
-
[解決済み] x--やx++はここで何をするのですか?