「古い」HTTP JavaDSLからの移行ガイド

「古い」HTTP JavaDSLからの移行ガイド

Akka HTTPのためのいわゆる「古い」JavaDSLは当初、プロジェクトの実験段階で開発されました。複数のユーザーからのコメントと貢献により、Java 8の「感じ」を実現することができました。 それは既存のScalaDSLにも近いものでした。

以前のDSLは完全に削除され、いわゆる「新しい」DSLに置き換えられました。 新しいDSLへのアップグレードは、以前のバージョンとのやり取りが難しいだけでなく、多くの典型的なユースケースを表現することが実際には不可能であったため、強く推奨されています

最も大きな変更点は次のとおりです。

HttpAppはなくなりました

HttpApp (``main() ``の実装を含むヘルパークラス) がなくなりました。APIのさまざまな要素がどのように適合するかを理解しておきたいと思います。

代わりに、開発者は ``Route.flow``メソッドを使って ``Route``を ``Flow <HttpRequest, HttpResponse, ?>``に変換することによって、アプリケーションを "手動で" 開始するべきです。 完全なアプリケーションの例は:ref:`http-testkit-java`を参照してください。

``RequestVal``はなくなりました

古いAPIは、リクエストコンテキストから値を抽出するために使用できる「リクエスト値」の概念に大きく依存していました。

コミュニティからのフィードバックや私たちの経験によって、より複雑な設定では対応が難しいことがわかりました。 リクエスト値の概念は完全に削除され、ScalaDSLのような適切な「ディレクティブ」に置き換えられました。

以前:

RequestVal<Host> host = Headers.byClass(Host.class).instance();

final Route route =
  route(
    handleWith1(host, (ctx, h) ->
      ctx.complete(String.format("Host header was: %s", h.host()))
    )
  );

現在:

final Route route =
  headerValueByType(Host.class, host -> complete("Host was: " + host));

すべてのScalaDSLルーティングには、対応するJavaDSLがあります

``Route``と``RouteResult``の両方、そして``Rejections``のような他の重要なコアコンセプトはScalaで1対1でモデル化されています。Scalaを使ったブログからいくつかの素敵なパターンを学んだり、それをJavaやそれ以外の方法で適用する必要があるときには、他のAPIに基づいて1つのAPIを理解するのがはるかに簡単です。

Javaを使用してマーシャラーを実装できるようになりました。 詳細は:ref:`marshalling-java`を参照してください。

いくつかのcomplete*オーバーロードがcompleteOK*に変更されました。

JavaDSLでは、エンティティだけでcompleteが呼び出されたとき、``OK``のレスポンスコードが*想定されます*。これをより明示的にするために、これらのメソッドには ``OK``という単語が含まれています。

これは、すべてのオーバーロードとこれらAPIのFutureバージョンで、従来よりも一貫性がありました。

移植のヘルプ

古いAPIから移行する際には、いつものように、akka-user <https://groups.google.com/forum/#!searchin/akka-user/> _メーリングリストやgitterチャンネルを使って、いつでも助けや指導を求めることができます。

Lightbendサブスクリプションの所有者にとっては、Lightbendカスタマーポータル<https://portal.lightbend.com/> _で特定の質問をすることで、コアチームに移行の手助けをすることができます。

Contents