Scala 在Play框架中使用多个WS-requests在多个片段中检索API响应
我需要从API端点检索一些数据,该端点将返回大小限制为1MB。我需要检索的数据大于1MB,因此我需要将其分为多个块,并在最后将其放在一起。如果我只有两块,我知道我可以做如下事情:Scala 在Play框架中使用多个WS-requests在多个片段中检索API响应,scala,rest,playframework,Scala,Rest,Playframework,我需要从API端点检索一些数据,该端点将返回大小限制为1MB。我需要检索的数据大于1MB,因此我需要将其分为多个块,并在最后将其放在一起。如果我只有两块,我知道我可以做如下事情: val futureResponse: Future[String] = for { chunk1 <- ws.url(api_base + "/read") .withQueryString("offset" -> 0.toString, "length" ->
val futureResponse: Future[String] = for {
chunk1 <- ws.url(api_base + "/read")
.withQueryString("offset" -> 0.toString, "length" -> 1E6.toString)
.get()
.map { response =>
val raw_data = (Json.parse(response.body) \ "data").as[String]
val decoded_data = Base64.getDecoder.decode(raw_data)
new String(decoded_data, StandardCharsets.UTF_8)
}
chunk2 <- {
ws.url(api_base + "/read")
.withQueryString("offset" -> 1E6.toString, "length" -> 1E6.toString)
.get()
.map { response =>
val raw_data = (Json.parse(response.body) \ "data").as[String]
val decoded_data = Base64.getDecoder.decode(raw_data)
chunk1 + new String(decoded_data, StandardCharsets.UTF_8)
}
}
} yield chunk2
val futuresponse:Future[String]=for{
chunk1 0.toString,“长度”->1E6.toString)
.get()
.map{response=>
val raw_data=(Json.parse(response.body)\“data”).as[String]
val decoded_data=Base64.getDecoder.decode(原始_数据)
新字符串(解码的_数据,StandardCharsets.UTF_8)
}
chunk2 1E6.toString,“长度”->1E6.toString)
.get()
.map{response=>
val raw_data=(Json.parse(response.body)\“data”).as[String]
val decoded_data=Base64.getDecoder.decode(原始_数据)
chunk1+新字符串(解码的\u数据,StandardCharsets.UTF\u 8)
}
}
}产量块2
但是数据集之间的数据块数量会有所不同。假设我知道需要读取的块的数量,有没有办法使用某种forEach理解将任意数量的WS请求链接在一起?当没有更多可用的数据/块时,API端点会返回什么?基于此,您必须重复调用API。是否可以根据需要使用循环多次调用API,并附加结果?例如,将结果读取为字节