Web アプリケーションのクライアント側から、サードパーティ API の単なるラッパーであるサーバー側ルートにヒットしました。ディスパッチを使用して、サーバー側のリクエストが正確なヘッダーとサードパーティ API の応答をクライアント側の AJAX 呼び出しに返すようにしようとしています。
私がこれを行うとき:
val req = host("third-pary.api.com, 80)
val post = req.as("user", "pass") / "route" << Map("key" -> "akey", "val" -> "aval")
Http(post > as.String)
AJAX 呼び出しに応答が返されるのを常に確認し200
ます (予想通り)。構文が使用されているのを見たことがありますが、それは正確な応答とヘッダーに過ぎないため、Either
実際にはもっとです。Any
これはどのように書かれますか?
サーバー側で Scalatra を使用しているため、ローカル ルートは次のとおりです。
post("/route") {
}
編集:
これは、私が遊んでいる推奨されるどちらの一致例ですが、match
構文は意味がありません-エラーがあっても気にしません。エラーを返したいだけです。また、このメソッドで返される BODY を取得できないようです。
val asHeaders = as.Response { response =>
println("BODY: " + response.getResponseBody())
scala.collection.JavaConverters.mapAsScalaMapConverter(
response.getHeaders).asScala.toMap.mapValues(_.asScala.toList)
}
val response: Either[Throwable, Map[String, List[String]]] =
Http(post > asHeaders).either()
response match {
case Left(wrong) =>
println("Left: " + wrong.getMessage())
// return Action with header + body
case Right(good) =>
println("Right: " + good)
// return Action with header + body
}
理想的には、ソリューションは Scalatra を返しますActionResult(responseStatus(status, reason), body, headers)
。