내 목표는 최종 Map [id, Result]를 만드는 것입니다.Akka : 새로운 HttpRequests를 만들기위한 HttpResponse의 미래
case class Result(id: String, descr: String)
문제 : 다음 Result
은 다음과 같은 경우 클래스는 내가 JSON을 반환하는 API를 치고 싶다. 이 JSON을 구문 분석하고 전체 JSON에서 모든 member_id
필드를 검색 할 것입니다.
- 1) :
memberList : List[String]
이 후 , 내가 멤버 목록의 각 문자열을 수행 할 (아래, Akka 스트림 및 HTTP에서이 작업을 수행하는 방법을 내가에서 차단하고있어 일부) uri에 member_id를 추가하는 API를 클릭하십시오.
- 2) 최종 얻기 위해 모든 목록을 평평하게,
- 3) 반환 튜플
List[(id, Result)]
마지막으로 ID와 DESCR의 목록을 얻을 수있는 JSON을 구문 분석 Map[id, Result]
나는 제대로 두 가지 방법을 다음 구현할 수있는 방법 getResult
과 getResponse
(내가하려는 일에 대해 대략적으로 내 코드에 주석을 달았습니다.)
case class Result(id: String, descr: String)
//// This is the Starting point of my CODE:
private def addFeatureByTag(tag: String) : Map[String, Result] = {
val uri = "URI to get the Memebers"
val result = Source
.single(Http().singleRequest(HttpRequest(uri = uri))
.map(getMembers)
.map(getResult)
}
private def getMembers(response : Future[HttpResponse]):
Future[Source[String, NotUsed]] = {
response.flatMap {
res =>
res.status match {
case StatusCodes.OK =>
Unmarshal(res.entity).to[String] map {
jsonOut => getAllMembers(jsonOut). //// This method return the stream of `Members` (Strings)
}
}
}
}
// How can I implement following two methods correctly `getResult` and `getResponse`
private def getResult(member: Future[Source[String, NotUsed]]) : Future[Source[Future[HttpResponse], NotUsed]] = {
// member.map(mem => getResponse(PREFIX + mem))
}
private def getResponse(uri: Source[String, NotUsed]) = {
// val resp = Http().singleRequest(HttpRequest(uri))
// resp
}