Пример Trace4Cats для конечных точек Tapir

Я изучаю разные библиотеки Scala и добрался до трассировки. Trace4Cats заявляет об интеграции с конечными точками Tapir, и я хочу включить ее в свой пример маршрутизатора Play SIRD, который использует Tapir с документацией OpenAPI.

  1. До сих пор я включил эти зависимости для трассировки:
      // 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" % trace4CatsVersion
  1. У меня есть рабочий пример Tapir с маршрутизатором SIRD Play Framework, как это предлагается в документации Tapir. Здесь ApiRouter:
      @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 , или любым другим решением , которое может здесь работать). Помощь приветствуется.

1 ответ

Ваш вопрос слишком широк, чтобы дать точный ответ, но я бы порекомендовал вам посмотреть тесты и примеры в репозитории trace4cats на GitHub: https://github.com/trace4cats/trace4cats-sttp/tree/master/modules/sttp . -tapir/src/test/scala/io/janstenpickle/trace4cats/sttp/tapir

Другие вопросы по тегам