ルートはまだ
あなたはルートが一度だけ評価されていることを正しい動的です。しかし、どんなRouteのボディも本質的に動的である可能性があります。
val getTime =() => System.currentTimeMillis().toString
この関数はRoute
内に埋め込むことができます:
val route =
get {
path("currentTime") {
complete(getTime())
}
}
更新ファイルのルート
例として
、我々は現在の時刻を返す関数があるとし
route
が01であっても、各HttpRequestは異なる時刻値を返します。。
同様に、あなたはダイナミックHttpResponse
を作成するために、アッカにstreaming file ioを使用することができ、あなたの変更、ファイルの内容となっているエンティティ:
val fileResponse =() => {
val file = Paths get "sourceFile.txt"
val chunkSource = FileIO fromPath file
val chunkEntity =
Chunked.fromData(ContentTypes.`text/plain(UTF-8)`, chunkSource)
HttpResponse(entity = chunkEntity)
}
val fileRoute =
get {
path("sourceFile") {
complete(fileResponse())
}
}
例を延びる内部&外ルート
一歩進んで動的ルートにすると、毎回失敗する関数を書くことができます:
val halfBaked =() => {
var isGood = true
() => {
if(isGood) {
isGood = false
complete(fileResponse())
}
else {
isGood = true
complete(StatusCodes.InternalServerError)
}
}
}
これを外側のルートで囲みます。
val innerRoute = halfBaked()
val outerRoute =
get {
path("feelingLucky") {
innerRoute()
}
}
ニースの回答です。しかし、私の場合、それは再評価される必要がある指示自体です。これは、ディスクから認証クライアントIDを取得しており、それらはローテーションされている可能性があります。あなたのアプローチは残念ながらうまくいきません。 – akauppi
@akauppiコメントに基づいて私の答えを更新しました。また、あなたの質問は多少デザイン上の欠陥を示唆しています。副作用と状態を最低レベル、可能な限り小さなスペースに分離する必要があります。私の例では、isGood状態はユーティリティ関数内にあります。 Routeレベルまでの副作用があるようです。 –
あなたはデザインの瑕疵についてとても正しいです!あなたの答えのために、私は思考を再訪し、指示に従うのではなく、ファイル依存の動作をルートに移動することができました。非常に清潔で、私は非常に満足しています! :) – akauppi