首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将您的业务服务与zio-http (ZIO2.x)路由连接?

如何将您的业务服务与zio-http (ZIO2.x)路由连接?
EN

Stack Overflow用户
提问于 2022-04-28 07:57:43
回答 1查看 240关注 0票数 0

我无法将zio-http与我定义为ZLayers的后端服务连接起来。我发现的示例只显示了如何公开HTTP端点,如:

代码语言:javascript
复制
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:

代码语言:javascript
复制
  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 (免费)?

使用的版本:

代码语言:javascript
复制
val zioVersion = "2.0.0-RC5"
val zioHttpVersion = "2.0.0-RC7"
EN

回答 1

Stack Overflow用户

发布于 2022-05-10 08:32:14

你可以试试这个:

  1. 在您的伙伴对象中,创建一个def,它返回响应

的ZIO

代码语言:javascript
复制
 object GetDepartmentUseCaseImpl  {
   val layer: ZLayer[Any, Nothing, Has[GetDepartmentUseCaseImpl]] = ???
 
   def get: ZIO[Has[GetDepartmentUseCaseImpl], Throwable, Response] = ???
 }

  1. 创建您的应用程序如下:

代码语言:javascript
复制
// Create HTTP route
 val app: Http[Has[GetDepartmentUseCaseImpl], Throwable, Request, Response] = Http.collectZIO[Request] {
   case Method.GET -> !! / "departments" / _ =>
     GetDepartmentUseCaseImpl.get
 }

  1. 在引导服务器时提供层:

代码语言:javascript
复制
// Run it like any simple app
 override def run(args: List[String]): URIO[zio.ZEnv, ExitCode] =
   Server
     .start(8090, app)
     .provideCustomLayer(GetDepartmentUseCaseImpl.layer)
     .exitCode
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72040007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档