Hi everyone,
I'm using akka-http 1.0-M5 and I want to make the following transformation:
>From *RequestContext* to *HttpEntity* then *ByteStrings* andthen
*JsonString* andthen *Deserialize* andthen *[Domain object that came to
server in payload]*
The transformation path looks like: *RequestContext -> HttpEntity ->
ByteStrings -> JsonString -> Deserialize -> [Domain object]*
Here is a naive implementation of how to get complete request body as a
string:
// How to process request body
val collectBodySink = Sink.fold[String, String]("")(_ + _)
// Extract request body
val source = ctx.request.entity.getDataBytes().map {
chunk ⇒
chunk.decodeString(HttpCharsets.`UTF-8`.value)
}
// Define the way how materialization should follow
val runnable = source.toMat(collectBodySink)(Keep.right)
// Run materialization process
val requestBody = runnable.run()
// Wait till materialization will be finished
println(Await.result(requestBody, 5.seconds))
I thought that I can describe a bunch of flows:
- From *RequestContext* to *HttpEntity*
- From *HttpEntity* to *ByteStrings*
- From *ByteStrings* to *JsonString*
- etc
and later combine them all in the following way (pseudo code):
var domainObject = Source(ctx)
.via(Flow[RequestContext].to[HttpEntity]())
.via(Flow[HttpEntity].to[ByteStrings]())
.via(Flow[ByteStrings].to[JsonString]())
.via(Flow[JsonString].to[DomainObject]())
.toMat(Sink.ignore)
Questions regarding solution of this task:
1. Is it a correct idea to split such transformation into small pieces
in order to be able to combine them later?
2. How such things are suppose to be handled / implemented?
3. RequestContext contains a Request which contains HttpEntity which
contains dataBytes as a Source. In order to implement Flow from HttpEntity
to ByteStrings I'll have to materialize & run inside this Flow's body some
RunnableFlow. Was it designed like that? Is it ok to do it this ways? Or I
have to describe all flows, then combine then in some logical stream and
only then call run once in order to start all those transformations ?
Thank you in advance,
Appriciate any help/info regarding this topic.
Br,
Pavel
--
>>>>>>>>>> Read the docs: http://akka.io/docs/
>>>>>>>>>> Check the FAQ:
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user
---
You received this message because you are subscribed to the Google Groups "Akka
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.