Tôi chưa tìm thấy ví dụ hoặc cấu trúc vững chắc để chia nhỏ các tuyến Spray.io thành nhiều tệp. Tôi thấy rằng cấu trúc hiện tại của các tuyến đường của tôi sẽ trở nên rất cồng kềnh, và sẽ tốt hơn nếu trừu tượng chúng thành các "Bộ điều khiển" khác nhau cho một ứng dụng REST API rất đơn giản.Tuyến đường Spray.io có thể được chia thành nhiều "Bộ điều khiển" không?
Documents dường như không giúp quá nhiều: http://spray.io/documentation/spray-routing/key-concepts/directives/#directives
Dưới đây là những gì tôi có cho đến nay:
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))
}
}
}
}
Nhờ sự giúp đỡ về vấn đề này!
Có vẻ như điều đó thật khó. Tôi tự hỏi nếu tôi có thể soạn một số loại tiềm ẩn có thể kết hợp chúng tự động thay vì viết bằng tay service1 ~ service2 ~ service3. Cảm ơn! – crockpotveggies
Hmmm bỏ chọn nó vì có vẻ như nó tạo ra một số loại vấn đề thừa kế. 'các đối số kiểu [com.threetierlogic.AccountServ ice.AccountServiceActor] không phù hợp với tham số kiểu áp dụng của phương thức áp dụng [T <: akka.actor.Actor]' – crockpotveggies
Ok đã thực hiện một số tiến trình với 'trường hợp lớp cơ sở (actorRefFactory: ActorRefFactory) mở rộng HttpService {'Bây giờ vấn đề là các yêu cầu HTTP thất bại vì những điều sau đây:' Không thể gửi HttpResponse như là phản hồi (một phần) cho yêu cầu GET đến '/ ' vì trạng thái phản hồi hiện tại là 'Đã hoàn thành' nhưng phải là 'Chưa hoàn thành'' – crockpotveggies