我正在学习不同的Scala库,我需要跟踪。Trace4Cats声称与Tapir端点集成,我希望将它包含在我的示例Play SIRD路由器中,该路由器使用Tapir和OpenAPI文档。
到目前为止,我已经包含了这些用于跟踪的依赖项:
// Tracing
libraryDependencies += "io.janstenpickle" %% "trace4cats-core" % trace4CatsVersion
libraryDependencies += "io.janstenpickle" %% "trace4cats-inject" % trace4CatsVersion
libraryDependencies += "io.janstenpickle" %% "trace4cats-avro-exporter" % trace4CatsVersion
libraryDependencies += "io.janstenpickle" %% "trace4cats-sttp-tapir" % trace4CatsVersion
libraryDependencies += "io.janstenpickle" %% "trace4cats-datadog-http-exporter" % trace4CatsVersionApiRouter@Singleton
class ApiRouter @Inject() (implicit mat: Materializer) extends SimpleRouter {
// Interpreter
private val interpreter = PlayServerInterpreter()
// Controller logic
def countCharacters(s: String): Future[Either[Unit, Int]] =
Future(Right[Unit, Int](s.length))
// Endpoint
val countCharactersEndpoint: PublicEndpoint[String, Unit, Int, Any] =
endpoint
.tag("Example API")
.in("count")
.in(query[String]("string"))
.out(plainBody[Int])
.errorOut(
statusCode(StatusCode.NotFound)
)
// Route
val countCharactersRoutes: Routes =
interpreter.toRoutes(countCharactersEndpoint.serverLogic(countCharacters))
// OpenAPI
private val openApiDocs: OpenAPI = OpenAPIDocsInterpreter().toOpenAPI(
List(countCharactersEndpoint),
"Tapir Play Sample",
"1.0.0"
)
// Doc will be on /docs
private val openApiRoute: Routes = interpreter.toRoutes(SwaggerUI[Future](openApiDocs.toYaml))
// Router
override def routes: Routes =
openApiRoute
.orElse(countCharactersRoutes)
}我试图搜索Trace4Cats文档,了解如何将它与Tapir集成,但我发现的只是其他示例,包括STTP,但我不确定Tapir的语法。我需要有使用Trace4Cats (或Natchez或任何其他可以在这里工作的解决方案)经验的人的帮助。我们非常感谢你的帮助。
发布于 2022-05-11 18:14:49
您的问题过于宽泛,无法给出准确的答案,但我建议您查看trace4cats:https://github.com/trace4cats/trace4cats-sttp/tree/master/modules/sttp-tapir/src/test/scala/io/janstenpickle/trace4cats/sttp/tapir的trace4cats存储库中的测试和示例。
https://stackoverflow.com/questions/72202538
复制相似问题