tapir
Rapid development of self-documenting APIs
Intro
Tapir is a library to describe HTTP APIs, expose them as a server, consume as a client, and automatically document using open standards.
Tapir is fast and developer-friendly. The endpoint definition APIs are crafted with readability and discoverability in mind. Our Netty-based server is one of the best-performing Scala HTTP servers available.
endpoint
.get.in("hello").in(query[String]("name"))
.out(stringBody)
.handleSuccess(name => s"Hello, $name!")
Tapir integrates with all major Scala stacks, so you can use your favorite approach to Functional Programming, while leveraging all the benefits that Tapir brings!
Seamless integration with the Scala and HTTP ecosystems is one of Tapir’s major strengths:
all popular Scala HTTP server implementations are supported. You can define your entire API using Tapir, or expose Tapir-managed routes alongside “native” ones. This is especially useful when gradually adopting Tapir, or using it for selected use-cases.
the Scala ecosystem is rich with libraries leveraging its type-safety and enhancing the developer’s toolbox, that’s why Tapir provides integrations with many of such custom type, JSON and observability libraries
documentation can be generated in the OpenAPI, AsyncAPI and JSON Schema formats
Depending on how you’d prefer to explore Tapir, this documentation has three main sections:
There’s a number of tutorials, which provide a gentle introduction to the library
Nothing compares to tinkering with working code, that’s why we’ve prepared runnable examples, covering solutions to many “everyday” problems
Finally, the reference documentation describes all of Tapir’s aspects in depth - take a look at the menu on the left, starting with the “Endpoints” section
ScalaDocs are available at javadoc.io.
Tapir is licensed under Apache2, the source code is available on GitHub.
Why tapir?
type-safety: compile-time guarantees, develop-time completions, read-time information
declarative: separate the shape of the endpoint (the “what”), from the server logic (the “how”)
OpenAPI / Swagger integration: generate documentation from endpoint descriptions
observability: leverage the metadata to report rich metrics and tracing information
abstraction: re-use common endpoint definitions, as well as individual inputs/outputs
library, not a framework: integrates with your stack
Other sttp projects
sttp is a family of Scala HTTP-related projects, and currently includes:
sttp client: the Scala HTTP client you always wanted!
sttp tapir: this project
sttp model: simple HTTP model classes (used by client & tapir)
sttp shared: shared web socket, FP abstractions, capabilities and streaming code.
sttp apispec: OpenAPI, AsyncAPI and JSON Schema models.
Table of contents
- Overview of server integrations
- Running as an akka-http server
- Running as an http4s server
- Running as an http4s server using ZIO
- Running as a Netty-based server
- Running as a Helidon Níma server
- Running as a Finatra server
- Running as a pekko-http server
- Running as a Play server
- Running as a Vert.X server
- Running as a zio-http server
- Running as an Armeria server
- Running as a JDK http server
- Running using the AWS serverless stack
- Server options
- Path matching
- Interceptors
- Server logic
- Observability
- Error handling
- Logging & debugging
- Generating OpenAPI documentation
- Generating and exposing documentation in a single step
- Generating OpenAPI documentation separately
- Exposing generated OpenAPI documentation
- Options
- Inlined and referenced schemas
- Authentication inputs and security requirements
- OpenAPI Specification Extensions
- Hiding inputs/outputs
- Using SwaggerUI with sbt-assembly
- Generating AsyncAPI documentation
- Generating JSON Schema