Non ho trovato un solido esempio o struttura per suddividere le rotte Spray.io in più file. Sto scoprendo che l'attuale struttura dei miei percorsi diventerà molto ingombrante e sarebbe bello astrarli in "Controller" diversi per un'API REST molto semplice.Gli itinerari Spray.io possono essere suddivisi in più "Controller"?
Docs non sembrano aiutare più di tanto: http://spray.io/documentation/spray-routing/key-concepts/directives/#directives
Ecco quello che ho finora:
class AccountServiceActor extends Actor with AccountService {
def actorRefFactory = context
def receive = handleTimeouts orElse runRoute(demoRoute)
def handleTimeouts: Receive = {
case Timeout(x: HttpRequest) =>
sender ! HttpResponse(StatusCodes.InternalServerError, "Request timed out.")
}
}
// this trait defines our service behavior independently from the service actor
trait AccountService extends HttpService {
val demoRoute = {
get {
path("") {
respondWithMediaType(`text/html`) { // XML is marshalled to `text/xml` by default, so we simply override here
complete(index)
}
} ~
path("ping") {
complete("PONG!")
} ~
path("timeout") { ctx =>
// we simply let the request drop to provoke a timeout
} ~
path("crash") { ctx =>
throw new RuntimeException("crash boom bang")
} ~
path("fail") {
failWith(new RuntimeException("aaaahhh"))
} ~
path("riaktestsetup") {
Test.setupTestData
complete("SETUP!")
} ~
path("riaktestfetch"/Rest) { id =>
complete(Test.read(id))
}
}
}
}
Grazie per un aiuto su questo!
Sembra che questo faccia il trucco. Mi chiedo se riesco a comporre una sorta di implicito che può combinarli automaticamente invece di scrivere manualmente servizio1 ~ servizio2 ~ servizio3. Grazie! – crockpotveggies
Hmmm l'ha deselezionato poiché sembra che generi una sorta di problema dell'eredità. 'type arguments [com.threetierlogic.AccountServ ice.AccountServiceActor] non conforme ai limiti del parametro di tipo method apply [T <: akka.actor.Actor]' – crockpotveggies
Ok fatto alcuni progressi con 'case class Base (actorRefFactory: ActorRefFactory) estende HttpService {'Ora il problema è che le richieste HTTP falliscono a causa di quanto segue:' Impossibile inviare HttpResponse come risposta (parte) per la richiesta GET a '/ ' poiché lo stato di risposta corrente è 'Completato' ma dovrebbe essere 'Non completato' – crockpotveggies