Hummingbird transport for OpenAPI generator.
// Create your router.
let router = Router()
// Create an instance of your handler type that conforms the generated protocol
// defining your service API.
let api = MyServiceAPIImpl()
// Call the generated function on your implementation to add its request
// handlers to the app.
try api.registerHandlers(on: router)
// Create the application and run as you would normally.
let app = Application(router: router)
try await app.runService()
It is a common requirement that the router RequestContext
is used in OpenAPI endpoints. You can do this by adding a middleware that stores your RequestContext type in a TaskLocal.
struct RequestContextMiddleware: RouterMiddleware {
typealias Context = MyRequestContext
@TaskLocal static var requestContext: Context?
func handle(_ request: Request, context: Context, next: (Request, Context) async throws -> Response) async throws -> Response {
try await Self.$requestContext.withValue(context) {
try await next(request, context)
}
}
}
If you add a version of this middleware, replacing MyRequestContext
with your own RequestContext
type, to the end of your router middleware chain then it will be available from your OpenAPI endpoints via RequestContextMiddleware.requestContext
.
To get started, check out the full documentation, which contains step-by-step tutorials!