我开始学习Http4s,在工作中,我们可能需要将使用Akka实现的Rest迁移到Http4s。
例如,我可以定义如下自定义指令:
trait CustomDirectives {
def extractUUID: Directive1[UUID] = {
path(Segment).flatMap { maybeuuid =>
Try(UUID.fromString(maybeuuid)) match {
case Success(result) => provide(result)
case Failure(_) =>
complete(StatusCodes.BadRequest, s"Invalid uuid: $maybeuuid")
}
}
}
}因此,每次我想提取一个UUID并验证它时,我都可以使用这个指令。我们还有其他自定义指令来对头进行一些处理,还有更多。
在Http4s中有类似于akka自定义指令的东西吗?
发布于 2022-06-15 12:05:49
这在文档的处理路径参数部分中有描述。
// standard Scala extractor, matching String against UUID
object UUIDVar {
def unapply(maybeuuid: String): Option[UUID] =
Try(UUID.fromString(maybeuuid)).toOption
}
val usersService = HttpRoutes.of[IO] {
// just use extractor in pattern matching
case GET -> Root / "users" / UUIDVar(uuid) =>
Ok(useUUIDForSth(uuid))
}然而,就我个人而言,我发现用像塔帕尔或Endpoint4s这样的库来描述端点比较容易,因为它们的DSL在我看来更直观,而且我没有将我的代码与特定的实现耦合起来。
https://stackoverflow.com/questions/72624288
复制相似问题