Nie znalazłem solidnego przykładu lub struktury do podziału tras Spray.io na wiele plików. Zauważyłem, że obecna struktura moich tras stanie się bardzo kłopotliwa i byłoby miło rozrysować je na różne "Kontrolery" dla bardzo prostej aplikacji REST API.Czy trasy Spray.io można podzielić na wiele "Kontrolerów"?
Docs nie wydają się zbyt wiele pomóc: http://spray.io/documentation/spray-routing/key-concepts/directives/#directives
Oto co mam do tej pory:
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))
}
}
}
}
Dzięki za pomoc w tej sprawie!
Wygląda na to, że to wystarczy. Zastanawiam się, czy mogę skomponować coś w rodzaju niejawnego, które może łączyć je automatycznie zamiast ręcznie pisać service1 ~ service2 ~ service3. Dzięki! – crockpotveggies
Hmmm odznaczono go, ponieważ wygląda na to, że stwarza jakiś problem związany z dziedziczeniem. 'argumenty typu [com.threetlogic.AccountServ ice.AccountServiceActor] nie są zgodne z kryteriami dotyczącymi typu metody zastosowania [T <: akka.actor.Actor]' – crockpotveggies
Ok poczyniła pewne postępy z 'klasą przypadku Base (actorRefFactory: ActorRefFactory) extends HttpService {'Problemem są teraz żądania HTTP z powodu następujących:' Nie można wysłać HttpResponse jako odpowiedzi (części) dla żądania GET do '/ ', ponieważ bieżącym stanem odpowiedzi jest "Completed", ale powinno być "Uncompleted'' – crockpotveggies