docs/daprdocs/content/en/developing-applications/develop-components/develop-middleware.md

1.8 KiB

type title linkTitle weight description aliases
docs How to: Author middleware components Middleware components 200 Learn how to develop middleware components
/developing-applications/middleware/middleware-overview/
/concepts/middleware-concept/

Dapr allows custom processing pipelines to be defined by chaining a series of middleware components. In this guide, you'll learn how to create a middleware component. To learn how to configure an existing middleware component, see [Configure middleware components]({{% ref middleware.md %}})

Writing a custom HTTP middleware

HTTP middlewares in Dapr wrap standard Go net/http handler functions.

Your middleware needs to implement a middleware interface, which defines a GetHandler method that returns a http.Handler callback and an error:

type Middleware interface {
  GetHandler(metadata middleware.Metadata) (func(next http.Handler) http.Handler, error)
}

The handler receives a next callback that should be invoked to continue processing the request.

Your handler implementation can include an inbound logic, outbound logic, or both:


func (m *customMiddleware) GetHandler(metadata middleware.Metadata) (func(next http.Handler) http.Handler, error) {
  var err error
  return func(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
      // Inbound logic
      // ...

      // Call the next handler
      next.ServeHTTP(w, r)

      // Outbound logic
      // ...
    }
  }, err
}
  • [Component schema]({{% ref component-schema.md %}})
  • [Configuration overview]({{% ref configuration-overview.md %}})
  • API middleware sample