http://openjdk.java.net/jeps/321 を読んだ。
JEP 321: HTTP Client (Standard)
Owner Chris Hegarty Created 2017/06/08 11:46 Updated 2018/01/31 16:29 Type Feature Status Candidate Component core-libs/java.net Scope SE Discussion net dash dev at openjdk dot java dot net Effort M Duration M Priority 2 Reviewed by Alan Bateman, Brian Goetz Endorsed by Brian Goetz Issue 8181784
Summary
JDK 9とJDK 10のupdatedで導入されたincubatedのHTTP Client APIを標準化します。これはJEP 110由来のものです。
Goals
JEP 110のGoalsに加え、このJEPでは以下を行います。
Motivation
このJEPのMotivationはJEP 110のMotivationから変更はありません。
Description
このJEPの提案内容は、JDK 9とJDK 10のupdatedでincubating APIとして導入されたHTTP Clientの標準化です。このincubating APIには重要な改善に繋がった多数のフィードバックが寄せられましたが、大筋はそのままです。このAPIにはノンブロッキングリクエストとCompletableFutures
に基づくレスポンスセマンティクスが含まれ、依存アクションをトリガするチェーン処理ができます。リクエストとレスポンスボディのBack-pressureとflow-controlはjava.util.concurrent.Flow
APIのreactive-streamsを介して提供されます。
JDK 9とJDK 10ではincubatingなので、その実装をほぼ完全に書き直します。現在の実装は完全に非同期です(以前のHTTP/1.1実装はブロッキング)。RX Flowの概念を実装にプッシュダウンしており、HTTP/2をサポートするのに必要だった元々の概念の多くを削除しました。データフローのトレース、ユーザレベルのリクエストパブリッシャとレスポンスサブスクライバから基底のソケットまで、が簡単になります。これらにより、各種の概念とコードの複雑さを大きく削減し、HTTP/1.1とHTTP/2の再利用の可能性(possibility of reuse)を最大化しました。
提案した標準のモジュール名はjava.net.http
で、標準パッケージ名はjava.net.http
です。
Testing
incubated APIに対する既存のテストを修正して新しい標準APIで使えるようにする必要があります。すべてのシナリオをカバーするテストを追加する必要があり、特にHTTP/1.1とHTTP/2間のアップグレード・ダウングレードが挙げられます。
Risks and Assumptions
incubated HTTP Client APIに依存するコードは、パッケージインポートを少々、修正の必要があります。その他のincubatedの機能に差異はありません。incubatingモジュールに依存するコードは既にコンパイル・実行時に適切な警告を出しています。