Akka HTTPを使用してパーシャルレスポンスを描画したいと考えています。リクエストでは、クライアントはレスポンスに含めるフィールドを指定する必要があります(例えば、fields
リクエストパラメータを使用します(例:https://www.acme.com/api/users/100?fields=id,name,address
)。Akka HTTPで部分応答を表示する方法
私はこれを解決するためのどのような指摘にも感謝します。
Akka HTTPを使用してパーシャルレスポンスを描画したいと考えています。リクエストでは、クライアントはレスポンスに含めるフィールドを指定する必要があります(例えば、fields
リクエストパラメータを使用します(例:https://www.acme.com/api/users/100?fields=id,name,address
)。Akka HTTPで部分応答を表示する方法
私はこれを解決するためのどのような指摘にも感謝します。
Akka httpは、これらのタイプの問題を解決するために、Directivesとして知られている有用なDSLを提供します。 generateResponse
機能が100
となどid,name,address
と呼ばれる特定の例の要求(「https://www.acme.com/api/users/100?fields=id,name,address」)について
import akka.http.scaladsl.server.Directives._
val route = get {
path("api"/"users"/IntNumber) { pathInt =>
parameter('fields) { fields =>
complete(generateResponse(pathInt, fields))
}
}
}
:あなたは、特定のパスに一致して、「フィールド」キーのHttpRequest
クエリ文字列を抽出することができます入力変数。あなたはいくつかの値のルックアップテーブルを持っていると言う:
case class Person(id : String, name : String, address : String, age : Int)
val lookupTable : Map[Int, Person] = ???
あなたはその後、人を取得し、適切なフィールドを抽出するために、このルックアップテーブルを使用することができます。
def personField(person : Person)(field : String) = field match {
case "id" => s"\"id\" = \"${person.id}\""
case "name" => s"\"name\" = \"${person.name}\""
...
}
//generates JSON responses
def generateResponse(key : Int, fields : String) : String = {
val person = lookupTable(key)
"{ " +
fields
.split(",")
.map(personField(person))
.reduce(_ + " " + _)
+ " }"
}