我无法将zio-http与我定义为ZLayers的后端服务连接起来。我发现的示例只显示了如何公开HTTP端点,如:
import zio._
import zhttp.http._
import zhttp.service.Server
object HelloWorld extends App {
val app = Http.collect[Request] {
case Method.GET -> !! / "text" => Response.text("Hello World!")
}
override def run(args: List[String]): URIO[zio.ZEnv, ExitCode] =
Server.start(8090, app).exitCode
}现在,假设我在同伴对象中使用了以下ZLayer及其对应的ZLayer:
case class GetDepartmentUseCaseImpl(getDepartmentByCodeDrivenPort: GetDepartmentByCodeDrivenPort) extends GetDepartmentUseCase {
override def execute(param: String): ZIO[Any, Throwable, Option[Department]] = {
for {
dep: Option[Department] <- getDepartmentByCodeDrivenPort.get(param)
} yield dep
}
}
object GetDepartmentUseCaseImpl {
val layer = ZLayer.fromFunction(GetDepartmentUseCaseImpl.apply _)
}如何公开一个端点/departments/{id},该端点调用前面的服务,并返回200 + json (某些部门)和404 (免费)?
使用的版本:
val zioVersion = "2.0.0-RC5"
val zioHttpVersion = "2.0.0-RC7"发布于 2022-05-10 08:32:14
你可以试试这个:
的ZIO
object GetDepartmentUseCaseImpl {
val layer: ZLayer[Any, Nothing, Has[GetDepartmentUseCaseImpl]] = ???
def get: ZIO[Has[GetDepartmentUseCaseImpl], Throwable, Response] = ???
}// Create HTTP route
val app: Http[Has[GetDepartmentUseCaseImpl], Throwable, Request, Response] = Http.collectZIO[Request] {
case Method.GET -> !! / "departments" / _ =>
GetDepartmentUseCaseImpl.get
}// Run it like any simple app
override def run(args: List[String]): URIO[zio.ZEnv, ExitCode] =
Server
.start(8090, app)
.provideCustomLayer(GetDepartmentUseCaseImpl.layer)
.exitCodehttps://stackoverflow.com/questions/72040007
复制相似问题